赞
踩
滑动窗口:滑动窗口值小于目标值,窗口右端移动,滑动窗口值大于目标值,窗口左端移动。
- class Solution {
- public int minSubArrayLen(int target, int[] nums) {
- // 滑动窗口左端
- int left = 0;
- // 滑动窗口右端
- int right = 0;
- // 滑动窗口数值之和
- int sum = 0;
- // 子数组的最小长度
- int minLen = Integer.MAX_VALUE;
- int len = nums.length;
-
- // 滑动窗口右端不得超过数组长度
- while (right<len) {
- sum = sum + nums[right];
-
- // 滑动窗口和大于目标值时
- while (sum>=target) {
- // 注意:先计算子数组长度再将滑动窗口左端左移,否则存在边界问题:15 [1,2,3,4,5]
- if (sum >= target) {
- minLen = Math.min(minLen, right-left+1);
- }
- sum = sum - nums[left++];
- }
-
- // 每次循环滑动窗口右端右移一位
- right++;
- }
-
- if (minLen == Integer.MAX_VALUE) {
- return 0;
- }
- return minLen;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。