209 长度最小的子数组
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其总和大于等于 target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
暴力解法:
2层for循环,一个起始位置,一个终止位置,所有情况遍历一遍
滑动窗口思路:
不断调节子序列的起始位置和终止位置以得出我们想要的结果。
1个for循环做2个for循环的事情
j指向的是终止位置
如何移动起始位置?
i=0;
result=Max;
for(j=0; j<nums.size; j++){
sum+=nums[j];
while(sum>=s){ 持续移动过程
subL=j-i+1;
result=min(result, subL);
sum=sum-nums[i];
i++;
}
}
return result;
59 螺旋矩阵Ⅱ
模拟转圈
边界条件很多
关键点:正方形的四角何时处理(处理规则)
循环不变量:左闭右开[) 一次只处理一个节点
startX=0, startY=0;起始位置
offset=1;
count=1;
while(n/2){
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++;
}
if(n%2==1){
nums[][]=count单独赋值
}