LeetCode 977.有序数组的平方
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int l=0,r=nums.size()-1;
int k=r;
vector<int> result(nums.size(),0);
while(l<=r){
if(nums[r]*nums[r]>=nums[l]*nums[l]){
result[k--]=nums[r]*nums[r];
r--;
}
else{
result[k--]=nums[l]*nums[l];
l++;
}
}
return result;
}
};
这个题目感觉比较简单,当然是我能够简单理解双指针做法,我自己做只会暴力
需要注意的就是每次是从result末尾的地方开始插入k=r。
LeetCode 209.长度最小的子数组
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int sum=0,temp=0,result=INT32_MAX,i=0;
for(int j=0;j<nums.size();j++){
sum+=nums[j];
while(sum>=target){
temp=j-i+1;
result=result<temp?result:temp;
sum-=nums[i++];
}
}
return result==INT32_MAX ? 0:result;
}
};
看了一遍卡哥思路自己写的,感觉没什么特别难理解的地方,但是就是想不出来这种方法
学习一下两个宏INT32_MAX和INT32_MIN分别代表int类型下可以存储的最大正整数和最小值负整数,这两个宏在头文件<limits.h>中定义
LeetCode 59.螺旋矩阵||
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n,vector<int>(n,0));
int startx=0,starty=0,i=startx,j=starty;
int count=1;
int offset=1;
int loop=n/2;
while(loop--){
i=startx;
j=starty;
for(j=starty;j<n-offset;j++){
res[i][j]=count++;
}
for(i=startx;i<n-offset;i++){
res[i][j]=count++;
}
for(;j>starty;j--){
res[i][j]=count++;
}
for(;i>startx;i--){
res[i][j]=count++;
}
startx++;
starty++;
offset++;
}
if(n%2)res[startx][starty]=count;
return res;
}
};
这个可以看卡哥的一入循环深似海视频,讲解的很清楚,感觉没什么要补充的,注意的就是将一次转圈分为不同的四个部分,且要保证每次循环不变量。
还有要注意的一点就是在while循环中第一步必须得给i和j赋初值,否则力扣会判定你越界,通过不了。
总结
今天感觉比昨天更轻松一点,可能因为昨天理解了,今天的代码看一遍思路就能写的差不多,再接再厉。
最后附上卡哥对数组的专题总结