#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

京公网安备 11010502036488号