滑动窗口:在一个区间内找到满足符合条件,在不断的缩小区范围,找到最终的值。区间像窗口一样,不断的向前移动
题目:leetcode209
思路:
满足滑窗的条件是 数组元素之和,大于等于target。
起始位置移动时,当前窗口的值大于等于s了,窗口就要向前移动了(也就是该缩小了)。
结束位置移动时,窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。
leetcode59
leetcode59考察的循环变量不变的原则,规定好 左闭右开,左闭右闭的原则,按照定义好的原则。
int** generateMatrix(int n, int* returnSize, int** returnColumnSizes) {//初始化返回的结果数组的大小*returnSize = n;*returnColumnSizes = (int*)malloc(sizeof(int) * n);//初始化返回结果数组ansint** ans = (int**)malloc(sizeof(int*) * n);int i;for(i = 0; i < n; i++) {ans[i] = (int*)malloc(sizeof(int) * n);(*returnColumnSizes)[i] = n;}int startx = 0;int starty = 0; //设置每次循环的起始位置 int offer = 1; // 考虑的是左闭右开原则,最后一位不处理int count = 1; // 需要填入的值int mid = n / 2; // 当循环的数组为奇数的时候,中间的位置int loop = n /2; //循环圈数while(loop){int i = startx;int j = starty;// 遵循循环变量不变原则,左闭右开// 上边界 从左到右for(j ; j < n - offer; j++){ans[startx][j] = count++;}// 右边界,从上到下for(i ; i < n - offer; i++){ans[i][j] = count++;}// 下边界 从右到左for(j; j > starty; j--){ans[i][j]=count++;}// 左边界for(i; i > startx; i--){ans[i][j] = count++;}startx++;starty++;offer++;loop--;}if(n%2){ans[mid][mid]=count;}return ans;
}