leetcode_209. Minimum Size Subarray Sum

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/gxh27954/article/details/69983712

https://leetcode.com/problems/minimum-size-subarray-sum/#/description

Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous 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.


題意:給你一個數組,問最短的子序列大於s的長度是幾?

做法:首先記錄一下第一個到第i個的和,然後for for兩次肯定可以做出來了,不過估計要超時,所以得優化。

          那就能想到,比如從i到j滿足大於s了,那麼從第i+1個位置肯定要到j或者以上才能大於s


class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int length = nums.size();
        if(length==0)
        {
            return 0;
        }
        int sum[length+1];
        sum[0]=nums[0];
        int ans=1<<30;
        for(int i=1;i<length;i++)
        {
            sum[i]=sum[i-1]+nums[i];
        }
        int pos=0;
        int flag;
        int j=0;
        int vis=0;
        for(int i=0;i<length;i++)
        {
            flag=0;
            for(j=max(pos,i);j<length;j++)
            {
                if(sum[j]-sum[i]+nums[i]>=s)
                {
                    vis=1;
                    ans=min(ans,j-i+1);
                    flag=1;
                    pos=j;
                    break;
                }
            }
            if(flag==1)
            {
                j=pos;
            }
        }
        if(vis)
        {
            return ans;
        }
        return 0;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章