/*O(n)解法。用sum保存某一子段的和,即sum=nums[i]+...+nums[j]。
此时,res = j - i + 1;
令sum=sum-nums[i],如果sum>s, 则res=j-i;否则,sum+=nums[j+1]。重复。*/
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
if(nums.empty()) return 0;
int sum(0), res(INT_MAX);
int left(0);
for(int i = 0; i < nums.size(); ++i){
sum += nums[i];
while(sum >= s) {
if(i - left + 1 < res) res = i - left + 1;
sum -= nums[left++];
}
}
return res < INT_MAX ? res : 0;
}
};
LeetCode之Minimum Size Subarray Sum
最新推荐文章于 2022-01-12 13:20:46 发布