#include <bits/stdc++.h>
using namespace std;
const int N = 6e5+10;

int a[N];
int cnt[N];

int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }

    if(n==1)cout<<-1<<'\n';
    else if(a[1]==a[n])cout<<1<<'\n';
    else 
    {
        for(int i=2;i<=n-2;i++)
        {
            if(a[i]==a[1]&&a[i+1]==a[n])
            {
                cout<<2<<'\n';
                return 0;
            }
        }
        cout<<-1<<'\n';
        

    }
    return 0;
}

不难发现,在这种情况下,最多只需要两次,当首和尾元素相同,直接输出1,接下来O(n)复杂度遍历数组,比如100010110

这种,以开头开始到x下标为一段,从x+1到n为一段,从只需要字符串的2~n-1中出现10这种字符串即可匹配成功,反之另一种情况01同理,如果找不到,说明就无法完整消除,答案就是-1