#include <bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n,arr[N],a,b;
bool check(){
    for(int i=2;i<n-1;i++)
        if(arr[i]==arr[1]&&arr[i+1]==arr[n]) return 1;
    return 0;
}
int main() {
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>arr[i];
        if(arr[i]) a++;
        else b++;
    }
    if(arr[1]==arr[n]&&n!=1){cout<<"1\n";return 0;}
    if(!check()){cout<<"-1\n";return 0;}
    cout<<2;
    return 0;
}

因为数组元素的取值范围只有0或者1,所以可以考虑到最多只有2次即可取完。

需注意特例 n=1 。

若 数组元素的取值范围不止01,请看这题

https://ac.nowcoder.com/acm/problem/273707