给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的子数组。如果不存在符合条件的子数组,返回 0。
示例:
输入: [2,3,1,2,4,3], s = 7
输出: 2
解释: 子数组 [4,3] 是该条件下的长度最小的子数组。
- 1
- 2
- 3
进阶:
如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。
解题思路:利用左右两个指针往后加(java代码如下)
public int minSubArrayLen2(int s, int[] nums) { int l = 0; int r = 0; int cur = 0; int res = Integer.MAX_VALUE; while (r < nums.length) { if (cur < s) { cur += nums[r++]; } else { if (r - l < res) { res = r - l; } cur -= nums[l++]; } } //r已经加到最后了,这时需要将l尽可能的往右移 while(cur >= s) { cur -= nums[l++]; if (r - l + 1 < res) { res = r - l + 1; } } return res; }