其他分享
首页 > 其他分享> > 【LeetCode】209. 长度最小的子数组

【LeetCode】209. 长度最小的子数组

作者:互联网

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int sum[100010]={0};
        int n=nums.size();

        for(int i=1;i<=n;++i)
        {
            sum[i]=sum[i-1]+nums[i-1];
        }

        int ans=100010;
        int flag1,flag2=0,temp=0;
        int left,right,m,pm;
        for(int i=0;i<n;++i)
        {
            left=i+1;
            right=n; //从右边开始二分
            flag1=0;
            while(left<=right)   //二分
            {
                m=(left+right)/2;
                if(sum[m]-sum[i]>target)
                {
                    pm=m;
                    right=m-1;
                    if(!flag1)
                    {
                        flag1=1;
                    }
                }
                else if(sum[m]-sum[i]<target)left=m+1;
                else
                { 
                    pm=m;
                    if(!flag1)
                    {
                        flag1=1;
                    }
                    break;
                }
            }
            if(flag1&&(temp=pm-i)<ans)
            {
                ans=temp;
                flag2=1;
            }
        }
        if(!flag2)
            return 0;
        return ans;
    }
};

使用二分法暴力查找(正确思路应该是滑动窗口)

标签:right,flag1,nums,209,sum,二分法,int,数组,LeetCode
来源: https://www.cnblogs.com/zzxcm/p/15864537.html