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;
}
};
使用二分法暴力查找(正确思路应该是滑动窗口)