977.有序数组的平方
这道题目最开始我是认为直接每个数平方然后再重新排序。这样可以通过,但是有更简便的方法,双指针利用了排序数组的思想,最大的数只能从数组的首尾两端产生。所以新建一个数组然后每次都放进去即可。
209.长度最小的子数组
题目属于典型的滑动窗口问题,从最开始的一直往后找知道找到合适的结点。我这道题目最开始少考虑了当他没有找到符合题目要求的数组,直接返回了res,所以出错。
59.螺旋矩阵II
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n,vector<int>(n,0));
int loop = n/2;
int startx = 0;
int starty = 0;
int i=0;
int j = 0;
int offeset = 1;
int count = 1;
while(loop--){
i = startx;
j = starty;
for(;j<n-offeset;j++){
res[startx][j] = count;
count++;
}
for(;i<n-offeset;i++){
res[i][j] = count;
count++;
}
for(;j>=offeset;j--){
res[i][j] = count;
count++;
}
for(;i>=offeset;i--){
res[i][j] = count;
count++;
}
startx++;
starty++;
offeset++;
}
if(n%2 != 0){
int mid = n/2;
res[mid][mid] = n*n;
}
return res;
}
};
这道题目主要注意每次循环打印的时候保持一个不变量。要么左闭右开,要么左闭右闭。我这道题目最开始出现的问题是i和j的含义没搞清楚。。。我将他们的含义弄反了造成出错。
数组总结:
我们需要记住的是,在数组中,整体的内存都是连续的,我们一旦确定了数组的大小就不能改变了。增删元素都需要对其余元素进行移动。
关于数组的问题,一般常见的就是二分查找,滑动窗口,快慢指针,注意循环不变量。