刷题笔记
977一次ac
//209,给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int i = 0;
int j = 0;
int sum = 0;
int count = INT32_MAX; //一,取一个整数最大值的写法
bool flag = false;
while(j != nums.size()){
sum = sum + nums[j];
while(sum >= target){//二,这里用while,因为if只能判断一次,i只能往后移一位
count = min(count, j-i+1);
sum = sum - nums[i];
i++;
flag = true;
}
j++; //三,不管是sum小于target还是从while循环出来,j都要++
}
if(flag == false) return 0; //四,这块也需要注意
return count;
}
};
//螺旋矩阵
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
int left = 0;
int right = n - 1;
int top = 0;
int bottom = n - 1;
int k = 1;
vector<vector<int> > result(n,vector<int>(n));//一,二维矩阵的写法
while(k <= n * n){
for(int i = left; i <= right; i++){ //二,此处是i <= right,不是<
result[top][i] = k;
k++;
}
top++;
for(int i = top; i <= bottom; i++){
result[i][right] = k;
k++;
}
right--;
for(int i = right; i >=left; i--){
result[bottom][i] = k;
k++;
}
bottom--;
for(int i = bottom; i >= top; i--){
result[i][left] = k;
k++;
}
left++;
}
return result;
}
};
重点
二维 vector数组的写法:
数组一般有如下几种解题思路: