题解:P12280 [蓝桥杯 2024 国 Python A] 特别的数组

· · 题解

题目大意

题面已经说明清楚不做补充。

思路启发

如果我们知道特别的数组的长度最大是多少哪么我们就可以通过构造判断可不可以是这个最大值,所以这个题我们可以想到二分答案。

思路

关键代码

bool check(int x){//判断函数 
    int t[100005];//桶数组 
    int cnt=0;
    for(int i=1;i<=100000;i++){
        t[i]=0;//初始值 
    }
    for(int i=x+1; i<=n; i++){//统计a[i]有多少个以及计算cnt 
        t[a[i]]++;
        if(t[a[i]]==2){
            cnt++;
        }
    }
    if(cnt==0){//特殊情况 
        return 1;
    }
    for(int i=1; i+x<=n; i++){
        t[a[i+x]]--;//第二种情况:减少 
        if(t[a[i+x]]==1){
            cnt--;
        }
        t[a[i]]++;//第一种情况:增加 
        if(t[a[i]]==2){
            cnt++;
        }
        if(cnt==0){//答案大了 
            return 1;
         }
    }
    return 0;//答案小了 
}