904. 水果成篮
func totalFruit(fruits []int) int {
cnt := map[int]int{} // 哈希map
ans, j := 0, 0
for i, x := range fruits { // 遍历水果树
cnt[x]++ // 当前水果树的数量
for len(cnt) > 2 { // 如果我当前哈希表里面存了超过两种水果
y := fruits[j] // 准备删除最前面的水果
cnt[y]--
j++
if cnt[y] == 0 { // 如果为空了要删除,不然在算len(cnt)的时候还是会算上的啊
delete(cnt,y)
}
}
ans = max(ans, i-j+1)
}
return ans
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
时间复杂度 O(n),空间复杂度 O(1)。其中 n 为数组 fruits 的长度。