草庐IT

算法训练营笔记day02|977.有序数组的平方、209. 长度最小的子数组、59. 螺旋矩阵 II

977.有序数组的平方题目连接笔记双指针法:从两边开始遍历,选出平方值较大的数,从数组的后面开始插入。心得一开始想的是用两个指针从中间开始遍历,但是麻烦很多,代码还是简洁的好,应该多尝试反向思考。classSolution{public:vectorint>sortedSquares(vectorint>&nums){intleft=0;intright=nums.size()-1;vectorint>result(nums.size(),0);inti=nums.size()-1;while(leftright){if(nums[left]*nums[left]nums[right]*num

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

977.有序数组的平方题目链接:977.有序数组的平方方法一:暴力遍历varsortedSquares=function(nums){for(vari=0;inums.length-1;i++){nums[i]=Math.pow(nums[i],2)}returnnums.sort((a,b)=>{returna-b})}方法二:双指针数组是有序的平方后,数组的最大值是数组的两端varsortedSquares=function(nums){letnewArr=[]letk=nums.length-1//i,j首尾两个指针进行对比for(vari=0,j=nums.length-1;ij;){

代码随想录算法训练营day02|977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II

977.有序数组的平方977.有序数组的平方-题目看到这个题目的第一想法是暴力解法,求出数组中每个数的平方后,对数组进行排序classSolution{public:vectorsortedSquares(vector&nums){for(inti=0;i然而题目要求时间复杂度为o(n),暴力解法时间复杂度为o(n+nlogn)。看了题解后发现可以利用双指针解法,因为对含有负数的有序数组,最大值只能在数组的两端,因此用两个指针分别指向数组的起点和末尾,对两个指针指向的值的平方进行计算,判断。classSolution{public:vectorsortedSquares(vector&nums

连续子数组的最大和

题目输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1]的和最大,为6。提示:1-100分析采用动态规划思想做该题,首先创建一个变量max,存数组中的第一个值,变量max就是未来要求的所有子数组的和的最大值,数组从第二个元素开始遍历,再创建一个同样大小的新数组dp并将nums[0]赋值给dp[0],比较前一个值dp[i-1]加上当前值nums[i]的和与当前值nums[i]谁大,然后保存大的值赋值给dp[i],然后比较dp

代码随想录Day02 | LeetCode977.有序数组的平方、LeetCode209.长度最小的子数组、LeetCode59.螺旋矩阵II

977.有序数组的平方力扣题目链接(opensnewwindow)给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]示例2:输入:nums=[-7,-3,2,3,11]输出:[4,9,9,49,121]提示:1-104nums已按非递减顺序排序思路:暴力解法最直观的想法,莫过于:每个数平方之后,排个序,美滋滋,代码如下:classSolution{public:vec

代码随想录Day02 | LeetCode977.有序数组的平方、LeetCode209.长度最小的子数组、LeetCode59.螺旋矩阵II

977.有序数组的平方力扣题目链接(opensnewwindow)给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]示例2:输入:nums=[-7,-3,2,3,11]输出:[4,9,9,49,121]提示:1-104nums已按非递减顺序排序思路:暴力解法最直观的想法,莫过于:每个数平方之后,排个序,美滋滋,代码如下:classSolution{public:vec

2 第一章数组 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结 Day2

977.有序数组的平方力扣 这道题目最开始我是认为直接每个数平方然后再重新排序。这样可以通过,但是有更简便的方法,双指针利用了排序数组的思想,最大的数只能从数组的首尾两端产生。所以新建一个数组然后每次都放进去即可。209.长度最小的子数组力扣 题目属于典型的滑动窗口问题,从最开始的一直往后找知道找到合适的结点。我这道题目最开始少考虑了当他没有找到符合题目要求的数组,直接返回了res,所以出错。59.螺旋矩阵II力扣class Solution {public:    vector> generateMatrix(int n) {        vector> res(n,vector(n,0)

2 第一章数组 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结 Day2

977.有序数组的平方力扣 这道题目最开始我是认为直接每个数平方然后再重新排序。这样可以通过,但是有更简便的方法,双指针利用了排序数组的思想,最大的数只能从数组的首尾两端产生。所以新建一个数组然后每次都放进去即可。209.长度最小的子数组力扣 题目属于典型的滑动窗口问题,从最开始的一直往后找知道找到合适的结点。我这道题目最开始少考虑了当他没有找到符合题目要求的数组,直接返回了res,所以出错。59.螺旋矩阵II力扣class Solution {public:    vector> generateMatrix(int n) {        vector> res(n,vector(n,0)

【动态规划】子数组系列(上)

子数组问题文章目录【动态规划】子数组系列(上)1.最大子数组和1.1题目解析1.2算法原理1.2.1状态表示1.2.2状态转移方程1.2.3初始化1.2.4填表顺序1.2.5返回值1.3代码实现2.环形子数组的最大和2.1题目解析2.2算法原理2.2.1状态表示2.2.2状态转移方程2.2.3初始化2.2.4填表顺序2.2.5返回值3.代码实现3.乘积最大子数组3.1题目解析3.2算法原理3.2.1状态表示3.2.2状态转移方程3.2.3初始化3.2.4填表顺序3.2.5返回值3.3编写代码4.乘积为整数的最长子数组长度4.1题目解析4.2算法原理4.2.1状态表示4.2.2状态转移方程4.2

Leetcode 977-有序数组的平方 | LeetCode209-长度最小的子数组 | Leetcode59-螺旋矩阵

Leetcode977-有序数组的平方|LeetCode209-长度最小的子数组|Leetcode59-螺旋矩阵Leetcode977-有序数组的平方给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100],排序后,数组变为[0,1,9,16,100]示例2:输入:nums=[-7,-3,2,3,11]输出:[4,9,9,49,121]方法一-双指针法classSolution{public:vectorint>so