题目描述
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-size-subarray-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
//求满足条件的最小连续子数组,用滑动窗口
public:
int minSubArrayLen(int target, vector<int>& nums) {
//特殊情况
if(nums.size()==0)
return 0;
int left=0; //窗口左指针
int right=0;
int sum=0; //子数组的和,用于和目标进行比较
int res=nums.size()+1; //返回值,满足条件的最小长度
while(right<nums.size()){
//移动右指针
sum+=nums[right];
while(sum>=target){
sum-=nums[left]; //满足条件后移动左指针,使窗口变小
res=min(res,right-left+1);
left++;
}
right++;
}
return res==nums.size()+1?0:res;
}
};
本文介绍了如何使用滑动窗口算法解决找到数组中和大于等于目标值的最小子数组长度的问题。示例中展示了算法的实现过程,并提供了具体的代码实现。该算法在处理数组和目标值的关系时,有效地减少了计算复杂性。
302

被折叠的 条评论
为什么被折叠?



