长度最小的子数组-滑动窗口

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

解法滑动窗口:

class Solution {
public:
    int minSubArrayLen(int target, vector& nums) {
        int result = INT32_MAX;
        int length=0;
        int sum=0;
        int j=0;
        for(int i=0;i<=nums.size()-1;i++){
            sum+=nums[i];
            while(sum>=target){
                length=i+1-j;
                result=length

假设nums=[1,3,4,2],target=5;

首先初始化result为相对大的数,length为子数组长度,sum为子数组和,j为滑动窗口初始位置。

第一个for循环中的i用于确定滑动窗口终止位置,

当sum的值大于5时,此时子数组为[1,3,4],i=2,满足while循环,得到子数组长度为3,reult用于更新子数组长度。此时sum减去滑动窗口开始位置的值,sum=7,滑动窗口开始位置j++。

进而判断[3,4]是否满足while循环,并更新length;

当为[4]时不满足while循环此时进入for循环,滑动窗口终止位置i++,继续判断。

直到得到最小的length值。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-size-subarray-sum
 

你可能感兴趣的:(学习C++,leetcode,算法)