1 class Solution 2 { 3 private: 4 vector<int> result; 5 public: 6 vector<int> threeEqualParts(vector<int>& A) 7 { 8 int oneSum = 0; 9 for(auto d:A) 10 { 11 if(d==1) 12 oneSum ++; 13 } 14 15 if(oneSum==0) 16 { 17 result.push_back(0); 18 result.push_back(A.size()-1); 19 return result; 20 } 21 22 if(oneSum % 3 != 0) 23 { 24 result.push_back(-1); 25 result.push_back(-1); 26 return result; 27 } 28 29 int tmpOneSum = 0; 30 int i; 31 for(i = A.size()-1; i >= 0; i --) 32 { 33 if(A[i]==1) 34 tmpOneSum ++; 35 if(tmpOneSum == oneSum/3) 36 { 37 break; 38 } 39 } 40 41 vector<int> part3; 42 for(; i < A.size(); i ++) 43 part3.push_back(A[i]); 44 45 for(i = 0; A[i]==0; i ++) 46 ; 47 int part3End = 0; 48 49 for(int j = i; i-j < part3.size(); i ++) 50 { 51 if(A[i]!=part3[part3End++]) 52 { 53 result.push_back(-1); 54 result.push_back(-1); 55 return result; 56 } 57 } 58 59 int resultPart = i-1; 60 for(; A[i]==0; i ++) 61 ; 62 63 part3End = 0; 64 for(int j = i; i-j < part3.size(); i ++) 65 { 66 if(A[i]!=part3[part3End++]) 67 { 68 result.push_back(-1); 69 result.push_back(-1); 70 return result; 71 } 72 } 73 74 result.push_back(resultPart); 75 result.push_back(i); 76 77 return result; 78 } 79 };