LeetCode 209. 长度最小的子数组Golang版
双指针滑动窗口专题
第 3 题,第 76 题,第 209 题,第 424 题,第 438 题,第 567 题,第 713 题,第 763 题,第 845 题,第 881 题,第 904 题,第 978 题,第 992 题,第 1004 题,第 1040 题,第 1052 题。
1. 问题描述
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
2. 思路
滑动窗口
3. 代码
func minSubArrayLen(target int, nums []int) int {
var res int = len(nums) + 1
var sum int
left, right := 0, 0
for left < len(nums) {
if right < len(nums) && sum < target {
sum += nums[right]
right++
} else {
sum -= nums[left]
left++
}
fmt.Println(left, right)
if sum >= target {
res = min(res, right - left)
}
}
if res == len(nums) + 1 {
return 0
}
return res
}
func min(a, b int) int {
if a > b {
a = b
}
return a
}
func minSubArrayLen(target int, nums []int) int {
left, right := 0, 0
res := math.MaxInt32
var sum int
for right < len(nums) {
sum += nums[right]
for sum >= target {
res = min(res, right - left + 1)
sum -= nums[left]
left++
}
right++
}
if res == math.MaxInt32 {
return 0
}
return res
}
func min(a, b int) int {
if a > b {
a = b
}
return a
}