赞
踩
思路:题目是 数组和 >= target,不是等于target
双指针法:用for循环中的 r 来界定右边界的下标,右边界每移动一位,左边界可能需要移动多位,所以内部再用while, 当满足 数组和>=target时,记录最小数组长度,再移动左边界,继续往后面找。
class Solution { public int minSubArrayLen(int target, int[] nums) { int curNum = 0; //当前维护的窗口值的和 int l = 0; //窗口左边界下标 int ans = Integer.MAX_VALUE;//窗口长度 //r是滑动窗口右边界 for(int r=0; r<nums.length; r++){ curNum += nums[r]; //右边移动一位,左边可以移动多位,所以用while while(curNum >= target) { ans = Math.min(ans, r-l+1); curNum -= nums[l++]; } } return ans==Integer.MAX_VALUE?0:ans; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。