1. 程式人生 > >lintcode刷題——和大於S的最小子陣列

lintcode刷題——和大於S的最小子陣列

lintcode刷題之和大於s的最小子陣列

原題如下:

給定一個由 n 個整陣列成的陣列和一個正整數 s ,請找出該陣列中滿足其和 ≥ s 的最小長度子陣列。如果無解,則返回 -1。

您在真實的面試中是否遇到過這個題?  Yes 樣例

給定陣列 [2,3,1,2,4,3] 和 s = 7, 子陣列 [4,3] 是該條件下的最小長度子陣列。

解題思路:
1、用兩根指標,對陣列進行遍歷;

2、注意在判斷子陣列長度的時候,要用min來保證始終是最小的長度。

具體C++程式碼如下:
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
        int start=0,end=0;
        int l=nums.size();
        if(l==0)
        return -1;
        int sum=0;
        int res=l+1;//res賦初值為陣列長度加1
        while(end<l)
        {
            sum+=nums[end];
            if(sum>=s)
            {
                res=min(res,end-start+1);//為了保證此時的字陣列長度是最小的
                while(sum>=s&&start<=end)//當滿足子陣列之和大於等於s的時候,第二根指標發揮作用,從頭開始減去子數組裡面的元素
                {
                    res=min(res,end-start+1);
                    sum-=nums[start];
                    start++;
                }
               
            }
            end++;
        }
       if(res==l+1)
       return -1;
       else
       return res;
    }
};