看到这道题,第一个想法是遍历整个数组,然后返回满足 和条件 的相邻数组长度的最小值。如下所示:
int count=1, i=0;
int size = nums.size();while(i<nums.size())
{
int sum=nums[i];
for(int j=i+1; j< nums.size(); j++)
{
if(sum>=s) break;
sum+=nums[j]; count++;
}
if(nums.size()==count && sum < s) return 0;
if(sum>=s && count < size) size = count;
i++;count=1;
}
return size;
}
后来提交答案之后学习到一种更简便的方式:
int res = INT_MAX, sum = 0, left = 0;
for(int i=0; i<nums.size(); i++)
{
sum += nums[i];
while(left <= i && sum >=s)
{
res = min(res, i-left+1);
sum-=nums[left++];
}
}
return res==INT_MAX? 0: res;
其实还是双轨制的应用,设立两个指示,可减少运算量,仅遍历一遍就够了,节省运算时间。这个方法之前接触过,但是还没达到熟练应用的程度,有待改进。