欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法题_最短子数组之和

程序员文章站 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;
    }
};