这是滑窗两个while 不是双指针
一开始想复杂了,比如10101022222
出现第一次2的时候想直接跳到i也就是1的最右(第三次出现位置)
所以觉得一个hash不够用 要存和也要存最后一次的位置
但是其实慢慢挪就可以了
class Solution {
public int totalFruit(int[] d) {
//会写了 就是不断撤销
int n = d.length;
int max = 0;
int i = 0, j = 0;
Map<Integer,Integer> map = new HashMap<>();
int cur = 0;
while(j<n){
//如果不包含 那么就弹出最左
map.put(d[j],map.getOrDefault(d[j],0)+1);
while(map.keySet().size()>2){
//左边一直弹回来
map.put(d[i],map.get(d[i])-1);
if(map.get(d[i]) == 0) map.remove(d[i]);
i++;
}
max = Math.max(max,j-i+1);
j++;
}
return max;
}
}