代码随想录训练营第二天 977有序数组的平方 209长度最小的子数组 59螺旋矩阵II

本文主要是介绍代码随想录训练营第二天 977有序数组的平方 209长度最小的子数组 59螺旋矩阵II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一题:

题目链接:977. 有序数组的平方 - 力扣(LeetCode)

思路:

先将数组求完平方和后进行排序,很简单,主要是排序算法的考察。

这里采用快排

快排的思路:

取这个数组的中间值,然后以此为基准,判断这个基准的左边的元素是否小于基准值,右边的元素是否大于基准值,如果两边都为否,也就是说左边的值大于基准值,右边的值小于基准值,则交换两者的位置。然后一直迭代下去,对左边的元素进行以上操作同时对右边的元素也进行以上操作,最后便是排完序的结果。

代码如下:

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {for(int i = 0; i < nums.size(); i++){nums[i] = nums[i] * nums[i];}//sort(nums.begin(), nums.end());quicksort(nums, 0, nums.size() - 1);return nums;}
private:void quicksort(vector<int> &nums, int l, int r){if(l >= r) return;int mid = l + (r - l) / 2;int pivot = nums[mid];int i = l - 1, j = r + 1;while(i < j){do i++; while(nums[i] < pivot);do j--; while(nums[j] > pivot);if(i < j) swap(nums[i], nums[j]);}quicksort(nums, l, j);quicksort(nums, j + 1, r);      }
};

第二题链接:209. 长度最小的子数组 - 力扣(LeetCode)

思路:

双指针:使用快慢指针,首先定义一个慢指针为0,定义快指针一直遍历整个数组。

然后定义一个总和记录此时相加元素的总和sum。

此时维护一个范围让这个区间的元素的总和一直大于target,慢指针指向这个区间的最左边,快指针指向区间的最右边。

如何维护,首先先快指针遍历加到sum中,当sum的值大于等于target的时候,此时得到区间的长度进行比较最后得到最小值,同时更行左边界,也就是让慢指针右移直到区间内的元素总和小于target。

代码如下:

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int res = INT_MAX;int sum = 0, slow = 0;for(int fast = 0; fast < nums.size(); fast++){sum += nums[fast];while(sum >= target){res = min(res, fast - slow + 1);sum -= nums[slow];slow++;}}return res == INT_MAX ? 0 : res;}
};

第三题链接:59. 螺旋矩阵 II - 力扣(LeetCode)

思路:

模拟把元素放进指定位置的过程。定义上下左右四个边界。当第一行的元素放入后,上边界++,当最后一列的元素放入后,右边界--,当最后一行的元素放入后,下边界--,当第一列元素放入后,左边界++;直到放完为止。

代码如下:

class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> res(n, vector<int>(n, 0));int num = 1; int des = n * n;int l = 0, r = n - 1, t = 0, b = n - 1;while(num <= des){for(int i = l; i <= r; i++){res[t][i] = num++;}t++;for(int i = t; i <= b; i++){res[i][r] = num++;}r--;for(int i = r; i >= l; i--){res[b][i] = num++;}b--;for(int i = b; i >= t; i--){res[i][l] = num++;}l++;}return res;}
};

这篇关于代码随想录训练营第二天 977有序数组的平方 209长度最小的子数组 59螺旋矩阵II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1037988

相关文章

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

IDEA与MyEclipse代码量统计方式

《IDEA与MyEclipse代码量统计方式》文章介绍在项目中不安装第三方工具统计代码行数的方法,分别说明MyEclipse通过正则搜索(排除空行和注释)及IDEA使用Statistic插件或调整搜索... 目录项目场景MyEclipse代码量统计IDEA代码量统计总结项目场景在项目中,有时候我们需要统计