题目:
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0 。
解题思路:
方法一:暴力解法
通过两个for循环,找出所有满足和 ≥ target的情况,然后取最小值。时间复杂度为O($ n^2 $)。方法二:滑动窗口法
所谓的滑动窗口就是不断调节子序列的起始位置和终止位置,从而得出想要的结果。
模式说明:
输入是一个数组或字符串,求解的结果是具有某种特质的子数组或子字符串。这种情况下下,可以使用滑动窗口的方法求解。
应用滑动窗口的注意事项:
- 可以通过两个指针来标识窗口的边界
- 窗口的长度可固定也可改变,取决于求解问题的性质
- 维护一个或一组和窗口相关联的状态变量,能有效降低计算量和算法复杂度
实现代码:
方法一:暴力解法
1 | var minSubArrayLen = function(target, nums) { |
方法二:滑动窗口法
1 | var minSubArrayLen = function(target, nums) { |