算1的个数,和最后一个1的位置(算1后面应该跟几个0),然后从头开始分割,然后比较是不是每个部分都一样。
class Solution {
public:
vector<int> threeEqualParts(vector<int>& A) {
vector<int> res={-1,-1};
int count1=0,count2=0,last1=0,len=A.size();
for(int i=0;i<len;i++){
if(A[i]==1){
last1=i;
count1++;
}
}
if(count1==0){
res[0]=0,res[1]=len-1;
return res;
}
if(count1%3!=0) return res;
int pat1=-1,pat2=-1;
for(int i=0;i<len;i++){
if(A[i]==1) count2++;
if(count2==count1/3){
i+=(len-1-last1);
if(pat1==-1)pat1=i;
else if(pat2==-1) pat2=i;
count2=0;
}
}
if(pat2==-1||pat2>=len)return res;
int len1=pat1+1,len2=pat2-pat1,len3=len-pat2-1,minlen=min(len1,min(len2,len3));
for(int i=0;i<minlen;i++){
if(!(A[pat1-i]==A[pat2-i] && A[pat2-i]==A[len-1-i]))return res;
}
res[0]=pat1,res[1]=pat2+1;
return res;
}
};