lintcode-406-和大于S的最小子数组

给定一个由 n 个整数组成的数组和一个正整数 s ,请找出该数组中满足其和 ≥ s 的最小长度子数组。如果无解,则返回 -1。

您在真实的面试中是否遇到过这个题?  
Yes
样例

给定数组 [2,3,1,2,4,3] 和 s = 7, 子数组 [4,3] 是该条件下的最小长度子数组。

挑战

如果你已经完成了O(n)时间复杂度的编程,请再试试 O(n log n)时间复杂度。

class Solution {
public:
    /**
     * @param nums: a vector of integers
     * @param s: an integer
     * @return: an integer representing the minimum size of subarray
     */
    int minimumSize(vector<int> &nums, int s) {
        // write your code here
        if(nums.empty())
            return -1;
        
        int result=INT_MAX,begin=0,end=0,size=nums.size(),sum=0;
        
        while(end<size){
            sum+=nums[end];
            while(sum>=s&&end>=begin){
                if(result>end-begin+1)
                    result=end-begin+1;
                sum-=nums[begin]; 
                ++begin;
            }
            ++end;
        }
        return result==INT_MAX?-1:result;
    }
};


你可能感兴趣的:(lintcode-406-和大于S的最小子数组)