✨hello,愿意点进来的小伙伴们,你们好呐!
✨ 系列专栏:【力扣刷题篇】
本篇内容:移动窗口题型讲解
作者简介:一名现大二的三非编程小白
这个题我们很容易的想到用暴力求解是可以解出来的,但是就是时间复杂度太高了,可能会超出时间限制,所以我们可以想一种比较合适的解法 – 滑动窗口
我们先定义一个start作为窗口的起始,end作为窗口的末端,刚开始start和end都指向0下标。
定义ans 为一个很大的数,来存储数组元素的个数,sum为0,来存储子数组元素的和。
接下来看图片演示
当子数组满足要求时,就可以将该子数组长度存起来,并将start往前移动一位,来查找下一个子数组。移动到,sum小于目标值即可
4.
然后以此类推,循环判断下去,最终找到最小的窗户返回。
Java代码如下:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int n = nums.length;
if (n == 0) {
return 0;
}
int ans = Integer.MAX_VALUE;
int start = 0;
int end = 0;
int sum = 0;
while(end < n){
sum += nums[end];
while(sum >= target){
ans = Math.min(ans,end - start + 1);
sum -= nums[start];
start++;
}
end++;
}
return ans == Integer.MAX_VALUE ? 0 : ans;
}
}