209、长度最小的子数组
基本思想:
滑动窗口
具体实现:
1.窗口内是什么?
窗口内是窗口起始位置和窗口结束位置框住的一段数组。
2.窗口的起始位置如何移动?
如果当前窗口的值>=s,窗口要缩小,就是起始位置向后移。
3.窗口的结束位置如何移动?
如果当前窗口的值<s,窗口要扩大,就是结束位置向后移。
代码:
class Solution { public int minSubArrayLen(int target, int[] nums) { int left = 0;//滑动窗口起始位置指针 int sum = 0;//窗口内元素之和 int result = Integer.MAX_VALUE; for (int right = 0; right < nums.length; right++){//如果当前窗口的值<s,窗口要扩大,就是结束位置向后移。 sum += nums[right]; while (sum >= target){ result = Math.min(result,right - left + 1);//找长度最小的 sum -= nums[left++];//如果当前窗口的值>=s,窗口要缩小,就是起始位置向后移。 } }//如果当前窗口的值<s,窗口要扩大,就是结束位置向后移。 return result == Integer.MAX_VALUE ? 0 : result; } }