双指针-滑动窗口
func totalFruit(fruits []int) int {
// 用map来记录水果的数量
basket := map[int]int{}
res := 0
// 双指针-滑动窗口来维持满足最多两种水果的限制
for i, j := 0, 0; j < len(fruits); j++ {
// 将右指针的水果放入篮子中
basket[fruits[j]]++
// 当篮子中的水果超过两种时左指针右移减少水果
for i <= j && len(basket) > 2 {
basket[fruits[i]]--
if basket[fruits[i]] == 0 {
delete(basket, fruits[i])
}
i++
}
// 对比更新结果
if res < j - i + 1 {
res = j - i + 1
}
}
return res
}