https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/hua-dong-chuang-kou-by-powcai/
网友整理的滑动窗口专题,这周可以专攻一下
209. 长度最小的子数组
题目描述:
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
示例 2:
输入:target = 4, nums = [1,4,4]
输出:1
示例 3:
输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0
这道题是似曾相识的滑动窗格,只不过我们现在窗格的要求是各个数字加起来的和》=目标数字
思路:
case1:
具体代码如下,但是超出了运行时间。。。
还是讲一下我的思路
如果要找最小的组合,那么就要有一个左边的指针遍历每一个元素,然后从指针所指元素开始,把后面的元素append到result_list里面,直到找出sum大于等于target的数组,然后把这个数组的长度跟min_len相比较,找出最小值,这个方法需要用到两重循环解决
时间超了,想办法优化:
看了的官网第三种解答方法,才觉得自己并没有完全理解滑动窗口法
https://leetcode-cn.com/problems/minimum-size-subarray-sum/solution/chang-du-zui-xiao-de-zi-shu-zu-by-leetcode-solutio/
这个网友的解释我觉得很好理解,以后也可以尝试把复杂的逻辑想象成生活里的事物来理解,这里稍微引用一下:
“看逻辑累的同学,可以尝试从贪吃蛇的角度去考虑这个问题。一直吃前面的方块,直到长度符合最小要求,这时我们不可能去掉头部方块,因为没吃它之前长度不够,然后为了减肥,我们只能考虑去减掉后面的方块。 减完一阵子之后,蛇蛇还想知道怎么才能更瘦,那肯定是看前面有没有更大的方块进来,以便我们排出更多小方块。所以需要继续边吃边吐的过程。”
代码如下:
其实官网还有一种解法,今天吃完晚饭之后再来更,写数学去啦啦啦啦