LeetCode 209. 长度最小的子数组
题目描述
思路分析
滑动窗口
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
func minSubArrayLen(target int, nums []int) int {
res := len(nums) + 1
left, right := 0, 0
total := 0
for right < len(nums) {
total += nums[right]
for total >= target {
res = min(res, right-left+1)
total -= nums[left]
left++
}
right++
}
if res == len(nums)+1 {
return 0
}
return res
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
func minSubArrayLen(target int, nums []int) int {
n := len(nums)
minLen := math.MaxInt32
sum := 0
left := 0
for right := 0; right < n; right++ {
sum += nums[right]
// 如果当前窗口的和大于等于 target,尝试缩小窗口的左边界
for sum >= target {
minLen = min(minLen, right-left+1)
sum -= nums[left]
left++
}
}
// 如果没有找到符合条件的子数组,返回0,否则返回最小长度
if minLen == math.MaxInt32 {
return 0
}
return minLen
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用