209. 长度最小的子数组
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其和 ≥ target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
本题应该是用前缀和的方法完成,但是滑动窗口实在太牛逼了,谁用谁知道
双指针,一个指针滑动负责放入元素,另外一个指针负责取出元素,到底时退出循环,简单粗暴,最后输出记录过的最小元素数就好
class Solution {public int minSubArrayLen(int s, int[] nums) {int lo = 0, hi = 0, sum = 0, min = Integer.MAX_VALUE;while (hi < nums.length) {sum += nums[hi++];while (sum >= s) {min = Math.min(min, hi - lo);sum -= nums[lo++];}}return min == Integer.MAX_VALUE ? 0 : min;}
}