1. 程式人生 > >lintcode-406-和大於S的最小子陣列

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;
    }
};