本文主要是介绍【leetcode209】长度最小的子数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
209. 长度最小的子数组
难度中等512收藏分享切换为英文接收动态反馈
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
示例:
输入:s = 7, nums = [2,3,1,2,4,3]
输出:2 解释:子数组[4,3]
是该条件下的长度最小的子数组。
进阶:
- 如果你已经完成了 O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。
package mainfunc main() {s := 7nums := []int{2,3,1,2,4,3}print(minSubArrayLen(s, nums))
}
// 【滑动窗口】
// [left, right)为双指针区间, 两者之间得和为滑动窗口之和sum_windos
// 右边一直加和,直到窗口中和大于定值s, 不断移除左边中值直到sum_window < s,如果过程中窗口func minSubArrayLen(s int, nums []int) int {var res = len(nums) + 1left, right := 0, 0sum_window := 0for right < len(nums) {sum_window += nums[right]right++for sum_window >= s {sum_window -= nums[left]left++if right - left + 1 < res {res = right-left+1}}}// res % (n+1) 是为了处理 sum(a) < s 的情况 防止所有数加起来和,没有s大return res % (len(nums) + 1)
}
这篇关于【leetcode209】长度最小的子数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!