209
先找到右边界再找左边界,循环往复
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int left = 0;
int right = 0;
int sum = 0;
int result = INT_MAX;
for(;right < nums.size();right++)
{
sum += nums[right];
while(sum >= target)
{
int subL = right - left + 1;
result = min(result,subL);
sum -= nums[left];
left++;
}
}
if(result != INT_MAX)
{
return result;
}else{
return 0;
}
}
};
59
考察循环不变量思维
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
int startx = 0,starty = 0;
int offset = 1,count = 1;
int times = n/2;
vector<vector<int>> nums(n,vector(n,0));
while(times > 0)
{
int i = 0,j = 0;
for(j = starty;j < n - offset;j++)
{
nums[startx][j] = count++;
}
for(i = startx;i < n - offset;i++)
{
nums[i][j] = count++;
}
for(;j > starty;j--)
{
nums[i][j] = count++;
}
for(;i > startx;i--)
{
nums[i][j] = count++;
}
startx++;
starty++;
offset++;
times--;
}
if(n%2 == 1)
{
nums[n/2][n/2] = count;
}
return nums;
}
};