题意:给定一个数组,和一个值,返回和<=该值的最短subarray
思路:
- 遍历数组,后移end,用sum记录当前滑动窗口的start到end的和
- 如果加上当前数后sum>=s,那么向前移动start,缩小窗口并更新res
- 如果最后没找到res,返回0,否则返回res
思想:滑动窗口
复杂度:时间O(n),空间O(1)
class Solution {
public int minSubArrayLen(int s, int[] nums) {
int len = nums.length;
int start = 0;
int end = 0;
int res = len+1;
int sum = 0;
while(end < len) {
sum += nums[end++];
while(start < end && sum >= s) {
res = Math.min(res, end - start);
sum -= nums[start++];
}
}
if(res == len+1)
return 0;
return res;
}
}
网友评论