问题描述:给定一个含有 n
个正整数的数组和一个正整数 target
。找出该数组中满足其总和大于等于 target
的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
题目链接:. - 力扣(LeetCode)
解题思路:双指针,亦或者是滑动窗口(有点难)
滑动窗口法是数组中另一种十分常用的算法,主要需要考虑三个方面。209. 长度最小的子数组(滑动窗口法)_result = result < sublength ? result : sublength;-CSDN博客
(1) 滑动窗口内的内容指什么?
(2) 滑动窗口的起始位置如何移动?
(3) 滑动窗口的终止位置如何移动?
先要搞清楚指针代表的是数组头还是尾,其次最重要的是条件判断是用if还是while,对于滑动窗口来说,一般采用while。
由于这道题目解法叫做滑动窗口,那么刷题的小伙伴应该也记得一道叫做滑动窗口最大值的题目,该题的题目链接如下:. - 力扣(LeetCode)
那么我就在想这道题能不能也用队列的思想去做一做,后来果然可行:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int sum=0;
Deque<Integer> deque=new LinkedList();
int res=Integer.MAX_VALUE;
for(int i=0;i<nums.length;i++){
sum=sum+nums[i];
deque.offer(nums[i]);
while(sum>=target){
res=res<deque.size()?res:deque.size();
sum=sum-deque.pollFirst();
}
}
return res==Integer.MAX_VALUE?0:res;
}
}
标签:窗口,target,int,算法,result,数组,滑动,数据结构
From: https://blog.csdn.net/adcdehjgy/article/details/140504085