1 solutions

  • 0
    @ 2025-12-9 16:04:55

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    int g,n,a[10005],b[10005];
    int main()
    {
    //      freopen("1.in","r",stdin);
    //  freopen("1.out","w",stdout);   
        cin>>g;
        while(g--)
        {
            fill(b,b+10001,0);//b数组记数
            cin>>n;
            for(int i=1;i<=n;i++)
                scanf("%d",&a[i]);
            b[a[1]]++;
            int bj=0;
            for(int i=2;i<=n;i++)//前后比较,做数组记数 
                if(a[i]!=a[i-1]) b[a[i]]++,bj=1;        
            if(bj==0) {printf("0\n");continue;}
            if(b[a[1]]==1 || b[a[n]]==1 || (a[1]==a[n] && b[a[1]]==2)) {printf("1\n");continue;}
            //a数组第1个或者最后1个只出现1次,或者头尾相同并且只出现2次 
            b[a[1]]--,b[a[n]]--;
            //第1个和最后1个次数减1,全部统一为:删除次数=出现次数+1   
            int ans=10000;
            for(int i=1;i<=10000;i++)
                if(b[i]!=0) ans=min(ans,b[i]);  
            printf("%d\n",ans+1);
        }
        return 0;
    }
    
    • 1

    Information

    ID
    1027
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    10
    Tags
    (None)
    # Submissions
    2
    Accepted
    2
    Uploaded By