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

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

上一篇:225. 用队列实现栈、Leetcode的Go实现


下一篇:【LeetCode】525. 连续数组