最多包含k种不同整数的子串

private int GetMaxInN(int[] A,int k){
        int len=A.length;
        int l=0,r=0;
        //+1是为了对齐 没有其他作用
        int[] freq=new int[len+1];
        int count=0;
        int res=0;
        //基本工作完成了 开始遍历
        while(r<len){
            if(freq[A[r]]==0){
                count++;
            }
            freq[A[r]]++;
            //最巧妙的是还有减的部分
            while(count>k){
                freq[A[l]]--;
                if(freq[A[l]]==0){
                    count--;
                }
                l++;
            }
            res+=r-l+1;
            r++;
        }
        return res;
    }

 

posted @ 2021-02-09 20:19  常熟阿诺  阅读(44)  评论(0编辑  收藏  举报