题目如下:
思路:先构造前缀和数组,通过双指针不断探索符合条件的数据并且更新数组即可。
代码:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
// 前缀和 + 双指针
int len = nums.length;
// 前缀和 preSum[i] = preSum[i-1] + num[i-1];
int[] preSum = new int[len+1];
for(int i=1;i<=len;i++){
preSum[i] = preSum[i-1] + nums[i-1];
}
// 双指针
int left = 0;
int right = 1;
int minLen = len+1;
boolean flag = false; // 用来标志是否遇到了答案
while(left<=right){
if(preSum[right]-preSum[left] < target){
right++;
if(right==len+1) break; // 长度不够了
}else if(preSum[right]-preSum[left] >= target){
minLen = Math.min(minLen, right-left); // 更新答案
flag = true; //表示找到了一个
left++; //缩小范围
}
}
// 如果一个符合条件的答案都没有找到,就返回0
if(!flag){
return 0;
}
// 否则就返回正确的答案
return minLen;
}
}
运行结果: