算法题_最短子数组之和
程序员文章站
2022-03-24 17:37:08
...
思路:我们可以使用滑动窗口法。
接下来我们用C++进行编程:
class Solution {
public:
/**
*
* @param s int整型
* @param nums int整型vector
* @return int整型
*/
int minSubArrayLen(int s, vector<int>& nums) {
// write code here
int i = 0 , j = -1;
int sum = 0;
int res = nums.size() + 1; //我们用了min去取最小值,res最大是n+1,而我们数组最大长度为n,这样保证了res最后最坏的情况下会取n
while( i < nums.size() ){ //不用再加1,因为 n-1 是最后一个元素,注意这里是 i 而不是 j
if( sum < s && j+1 < nums.size()){ //这里要保证 j最后取到n-2,因为后面有j++会取到最后一个元素
j++;
sum += nums[j];
}
else
sum -= nums[i++];
if( sum >= s )
res = min( res , j - i + 1);
}
if( res == nums.size()+1 )
return 0;
else
return res;
}
};