[LeetCode]Minimum Size Subarray Sum

Given an array of n positive integers and a positive integer s, find the minimal length of a subarray of which the sum ≥ s. If there isn't one, return 0 instead.

For example, given the array [2,3,1,2,4,3] and s = 7,
the subarray [4,3] has the minimal length under the problem constraint.

click to show more practice.

More practice:

If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log n).

思路:采用Window的思想,保证在窗内满足>=k的值,动态更新subarray的大小,找到所有subarray的最小值。扫描时动态更新边界。这样是O(N)的算法。

class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int length = nums.size();
        int ret = nums.size()+1;
        int temp = 0;
        int start = 0;
        for(int i=0;i<length;++i){
            if(temp<s){
                temp += nums[i];
            }
            while(temp>=s){ //更新右边界
                ret = (i-start+1)<ret?(i-start+1):ret;
                temp = temp - nums[start];
                start++; //更新左边界
            }
        }
        if(ret == nums.size()+1) //判断是否存在结果
            return 0;
        return ret;
    }
};


你可能感兴趣的:([LeetCode]Minimum Size Subarray Sum)