本题链接:Minimum Size Subarray Sum
本题标签:Array,Two Pointers,Binary Search
本题难度:
英文题目 中文题目方案1:
利用双指针构造一个不断改变大小的滑动窗口。用left代表窗口的左边,right代表窗口的右边。先不断向右移动right,累加窗口内的数字和sum;当sum大于s时,不断向右移动left,减去left所指的数字并求出此时窗口的最小长度,直到sum小于s;最后right遍历完nums时,在判断最小长度min_len是否等于INT_MAX,等于则说明不存在符合条件的连续子数组,否则返回min_len。
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int min_len = INT_MAX, sum = 0;
int left = 0, right = 0;
while(right < nums.size())
{
sum += nums[right];
while(sum >= s)
{
min_len = min(min_len, right - left + 1);
sum -= nums[left];
++left;
}
++right;
}
return min_len == INT_MAX ? 0 : min_len;
}
};
时间复杂度:
空间复杂度:
方案2:
网友评论