最小滑窗模板: 在满足条件的情况下不断压缩左边界
for j < len(nums) {
对nums[j]进行操作
for 满足条件 {
更新结果
i++
}
j++
}
example: 力扣209.长度最小的子数组
func minSubArrayLen(target int, nums []int) int {
l, r := 0, 0
sum := 0
res := len(nums) + 1
for r < len(nums) {
sum += nums[r]
for sum >= target {
if res > r - l + 1 {
res = r - l + 1
}
sum -= nums[l]
l++
}
r++
}
if res == len(nums) + 1 {
return 0
}
return res
}
最大滑窗模板 一旦满足条件,则扩展右边界
for j < len(nums) {
对nums[j]进行操作
for 不满足条件 {
i++
}
更新结果
j++
}
example: 力扣904.水果成篮
func totalFruit(fruits []int) int {
i, j := 0, 0
types := make(map[int]int)
res := 0
for ; j < len(fruits); j++ {
types[fruits[j]]++
for len(types) > 2 {
types[fruits[i]]--
if types[fruits[i]] == 0 {
delete(types, fruits[i])
}
i++
}
if res < j - i + 1 {
res = j - i + 1
}
}
return res
}