
Problem: 209. 长度最小的子数组
文章目录
题意分析
首先来分析一下本题的题目意思
- 题目中会给到一个数组,我们的目的是找出在这个数组中 长度最小的【连续】子数组,而且要返回这个子数组的长度

- 那我们首先来看示例1,在所找出的所有连续的子数组后,我们需要去比较谁的长度比较短一些,然后去选择短一些的这个子数组

- 下面们我们看这个示例3,其最后的返回长度为0,原因就在于给出的整型数组中所有数之和还是没有超过
target,所以呢就返回了0

💬 但是要如何去寻找这个最小的子数组呢,我们马上来揭晓🖐
算法原理讲解
我们通过分析此题的算法原理来看看该如何去进行求解
暴力枚举O(N^2)
首先第一种,还是我们最熟悉的暴力解法
- 不过也是要使用到双指针的,我们从0的位置开始向后遍历




- 好,通过上面的这个图示,我们可以清晰地看出经过
right的不断后移中,我们发现了一组长度> target的数据。但是呢我们这里使用的是【暴力枚举】,所以此时还会继续向后进行遍历操作→
可以观察到,当这个right继续后移将所遍历到的数加到sum上去的时候,虽然sum的大小是比target来得大了,但是呢这个len 的长度也相对应地发生可增长,这个其实的话就不对了,因为题目中所要求我们的是求解 最小子数组的长度

利用单调性,滑动窗口求解
看了上面的部分思路后,确实觉得暴力解法不可行,所以我接下去会使用【滑动窗口】的思想去做一个优化的操作
- 我们可以将
left向后移动一位,此时子数组的和即为当前的sum减去left刚刚所指位置的那个数,即为【6】,那么我们在计算整个子数组的和时就可以不用让

本文解析了如何解决209题中的最小连续子数组长度问题,介绍了暴力枚举的O(n^2)方法和利用单调性改进的滑动窗口O(n)算法。通过实例和代码展示了优化思路和复杂度分析。
最低0.47元/天 解锁文章
1245





