209. 长度最小的子数组
从头开始累加,如果加完某个元素后大于等于target,则考虑循环删除起始元素,并设起始元素的下个元素为起始元素
记录大于等于target时的长度,求最小即可
这样一定会经过结果子集
class Solution { public: int minSubArrayLen(int target, vector<int>& nums) { int ret = 1e5 + 10, cnt = 0; long long sum = 0; int n = nums.size(); for(int i = 0; i < n; i++) { sum += nums[i]; cnt++; while(sum - nums[i - cnt + 1] >= target) { sum -= nums[i - cnt + 1]; cnt--; } if(sum >= target) ret = min(ret, cnt); } if(ret == 1e5 + 10) return 0; return ret; } };