classSolution{public:intminSubArrayLen(int target, vector<int>& nums){int Min = nums.size();//用于存放最小数组的长度longint sum =0;//用于存放滑动窗口的和;int i =-1, temp =0;for(int j =0; j < nums.size();j++){
sum += nums[j];while(sum >= target){
temp = j-i;
Min =min(Min,temp);
i++;
sum -= nums[i];}}if(i ==-1){//用于判断不存在的情况
Min =0;}return Min;}};
小结 暴力法即使用双循环,遍历整个数组,寻找以每个位置为起始位置的满足题目条件的子数组,并在遍历过程中不断记录更新最小子数组的长度。 移动窗口法,使用i代表起始位置,j代表终止位置。若子数组的和不满足条件则 j 向前移动直到满足条件(此时 i不变,即只进行外层for循环,不参与内层while循环),若子数组的和满足条件,则 i 向前移动直到不满足条件(此时 j 不变,即参与内层while循环,不参与for循环。由于不参与for循环,故不能用if语句)
59 螺旋矩阵||
题目 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 题目链接:https://leetcode.cn/problems/spiral-matrix-ii/
代码
classSolution{public:
vector<vector<int>>generateMatrix(int n){
vector<vector<int>>Matrix(n, vector<int>(n,0));int circle =0;//表示循环次数;int count =1;//用于计算填入数组的数字int i =0, j =0;while( circle < n/2){//左到右
i = circle; j = circle;for( j = circle; j < n-circle -1; j++){
Matrix[i][j]= count++;}//上到下// i = circle, j = n-circle - 1;for( i = circle; i < n-circle -1; i++){
Matrix[i][j]= count++;}//右到左//i = n - circle - 1, j = n - circle - 1;for( j = n - circle -1; j > circle ; j--){
Matrix[i][j]= count++;}//下到上//i = n - circle - 1, j = circle;for( i = n - circle -1; i > circle ; i--){
Matrix[i][j]= count++;}
circle++;}if(n%2!=0){
Matrix[n/2][n/2]= count;}return Matrix;}};
小结 该题主要注意边界情况下各变量的取值以及边界条件的设定,同时还要注意 n 分别为奇偶数时最后一轮的处理情况。