题目地址:209. Minimum Size Subarray Sum
解题思路:
看到这道题,心里本身是有双指针这个概念的,但是不知道怎么用,脑子里第一反应就是暴力解法,双for一把梭,然后时间就超时了...看了题解才知道滑动窗口
这个解法,不禁直呼妙啊!感觉和双指针非常类似,其核心点在于避免了暴力算法的枚举,一位一位的从头加到尾计算一遍。就好像有一个滑动窗口
,这个窗口只聚焦大于target
的子序列,每当大于等于target
的时候,滑动窗口
定格,记录下子序列长度,然后开启另一个循环,减少元素,直到子序列达到继续增加的条件(子序列长度小于target
)。这个序列就好像一个队列
一样,出队几个元素,减小队列的长度,再入队几个元素去触摸target
的临界值,一旦出队的数量大于入队的元素数量,那么这个子序列的最小长度就会进一步缩小,借此减小子序列的长度。同样是双重循环,这个循环的次数是远小于暴力破解算法的。
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int length = nums.length;
if (length <= 0) {
return 0;
}
int subArrayLength = Integer.MAX_VALUE;
int start = 0;
int end = 0;
int sum = 0;
while (end < nums.length) {
sum += nums[end];
while (sum >= target) {
subArrayLength = Math.min(subArrayLength, end - start + 1);
sum -= nums[start++];
}
end++;
}
return subArrayLength == Integer.MAX_VALUE ? 0 : subArrayLength;
}
}
- 题解 LeetCode-Java LeetCode Subarray Minimum题解leetcode-java leetcode subarray 题解leetcode-java leetcode squares leetcodecn subarray minimum size leetcode-java leetcode-java时机leetcode股票 leetcode-java leetcode java 55 maximum-product-subarray leetcode subarray maximum 数组leetcode-java leetcode java leetcode deleting subarray element leetcode subarray maximum 53