滑窗经典模板

这是滑窗两个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;
    }
}

这也能滑窗?

转换最高频

原文地址:https://www.cnblogs.com/purexww/p/15332817.html