长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
209.长度最小的子数组
解题思路
1.暴力解题法
利用两个for循环, 寻找符合条件的子序列
2.利用滑动窗口,通过不断调节窗口大小来达到目的(参考通信中的滑动窗口)
通过左右两个窗口滑动, 来找到满足的要求,当滑动下一个数时,需要将前一个数减掉,并且循环需要判断新的序列中是否存在符合要求的子序列,因为可能存在新划入窗口中数很大
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int len = nums.size(), sum = 0, start = 0,max = INT_MAX, i;
for(i =0;i<len; i++)
{
sum+= nums[i];
while(sum >=target) //**刚开始的时候使用的if判断,没有考虑到窗口滑动的情况,会导致出现固定窗口大小的问题。 此处需要每次更新i的时候,需要判断子序列是否符合条件**
{
if((i- start+1) <max)
{
max =i- start+1;
}
sum -=nums[start];
start++;
}
}
return max ==INT_MAX? 0:max;
}
};