LeetCode 209. 长度最小的子数组

题目描述

🔥 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
}

🍏 点击查看 Java 题解

1
write your code here

相似题目

题目 难度 题解
最小覆盖子串 Hard  
和等于 k 的最长子数组长度 Medium  
最长重复子数组 Medium  
本文作者:
本文链接: https://hgnulb.github.io/blog/55813347
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!