LeetCode#209-长度最小的子数组
package shuangzhizhen; /* 209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例: 输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。 解题思路: 双指针 */ public class p209 { public static int minSubArrayLen(int s, int[] nums) { if (nums.length == 1 && nums[0] < s) return 0; int ans = 0; for (int i = 0; i < nums.length; i++) { ans += nums[i]; } if (ans < s) return 0; int len = nums.length; int left = 0, right = 0; int tmp = 0, res = len; while (right<len) { tmp += nums[right]; //System.out.println("--------------"); //此时窗口已经大于等于S了,此时移动left指针 while (left <= right && tmp >= s) { res = Math.min(res, right - left + 1); tmp -= nums[left]; //System.out.println(nums[left]); left++; } right++; } return res; } public static void main(String[] args) { int nums[]={2,3,1,2,4,3}; System.out.println(minSubArrayLen(7,nums)); } }
运行结果: