给定一个正整数数组,找到大于等于s的连续的最小长度的区间。
解法一:暴力解法
两层for循环,一个区间终止位置,一个区间起始位置,找到大于等于s的最小区间长度(超时了)
解法二:双指针,滑动窗口
思路:一个for循环完成两个for循环操作,for(j……),其中的j指的是终止位置,起始位置用动态移动策略移动。当终止位置移动后,集合里的元素和大于等于s时,起始位置开始向后移动,来缩小当前集合。此时动态的去调整起始位置来收集不同区间里的和。
重点:如何移动起始位置
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int result = INT32_MAX;
int sum = 0;
int i = 0;
int subl = 0;
for(int j = 0; j < nums.size(); j++)
{
sum += nums[j];
while(sum >= target)
{
subl = j - i + 1;
result = result < subl ? result : subl;
sum -= nums[i];
i++;
}
}
return result == INT32_MAX ? 0 : result;
}
};