
学习安排根据《代码随想录》~209
思路:
一、双指针
1.判断全部元素之和与target的大小关系;
2.如果满足target,此时右指针指向前一位,或者左指针指向后一位。继续比较;
3.反复,直到i<=j;
4.将长度值作比较选出最小的

经过努力,嗯,没写出来,感觉实施起来有困难:
1.每加和一次,都要遍历一次,增加了时间复杂度;
2.两种情况,只要有一种情况满足就可以执行下一步,步骤繁琐;
3.左右指针反复赋值;
于是放弃。。。看了看别人的代码思路,确实自己太年轻了。
二、滑动窗口

滑动窗口:保证每次移动,窗口内的值都满足target。
用双循环来找到j值并移动窗口
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums)
{
int i=0;
int sum=0;
int length=0;
int result=INT_MAX;
for(int j=0;j<nums.size();j++)
{
sum+=nums[j];
while(sum>=target)
{
length=j-i+1;
result=result<length?result:length;
sum-=nums[i++];
}
}
int m= result==INT_MAX?0:result;
return m;
}
};
sum-=nums[i++]; 更新 i值与 sum值;
1853

被折叠的 条评论
为什么被折叠?



