/**
* @param {number} s
* @param {number[]} nums
* @return {number}
*/
var minSubArrayLen = function(s, nums) {
var len = nums.length;
if(len === 0){
return 0;
}
var p1 = 0;
var p2 = 0;
var sum = nums[p1];
var minlen = Infinity;
var isfind = false;
while(p2<len){
if(sum < s){
p2++;
sum += nums[p2];
}else{
isfind = true;
if(p2-p1+1 < minlen){
minlen = p2-p1+1;
}
if(sum-nums[p1] >= s){
sum -= nums[p1];
p1++;
}else{
p2++;
sum += nums[p2];
}
}
}
if(isfind){
return minlen;
}else{
return 0;
}
};
这道题的思路是使用双指针,记录当前两指针指间数组元素和的大小sum,并根据sum值和s值的比对结果,来决定如何移动两个指针。
另外感觉这道题有一点点贪心算法的意思。