927. Three Equal Parts
| Given an array? If it is possible,return?any? 
 If it is not possible,return? Note that the entire part is used when considering what binary value it represents.? For example,? ? Example 1: Input: [1,1]
Output: [0,3] Example 2: Input: [1,1]
Output: [-1,-1]? Note: 
 ? class Solution {
public:
    vector<int> threeEqualParts(vector<int>& A) {
        int size = A.size();
        int countOfOne = 0;
        for (auto c : A)
            if (c == 1)
                countOfOne++;
        
        // if there don‘t have 1 in the vector
        if (countOfOne == 0)
            return {0,size-1};
        
        // if the count of one is not a multiple of 3,then we can never find a possible partition since
        //there will be at least one partion that will have difference number of one hence different binary
        //representation
        //For example,given:
        //0000110   110   110
        //    |     |     |
        //    i           j
        //Total number of ones = 6
        if (countOfOne%3 != 0)
            return {-1,-1};
        int k = countOfOne / 3;
        int i;
        for (i = 0; i < size; ++i) 
            if (A[i] == 1)
                break;
        int begin = i;
        int temp = 0;
        for (i = 0; i < size; ++i) {
            if (A[i] == 1)
                temp++;
            if (temp == k + 1)
                break;
        }
        int mid = i;
        temp = 0;
        for (i = 0; i < size; ++i) {
            if (A[i] == 1)
                temp++;
            if (temp == 2*k+1)
                break;
        }
        int end = i;
        while (end < size && A[begin] == A[mid] && A[mid] == A[end]) {
            begin++,mid++,end++;
        }
        if (end == size)
            return {begin-1,mid};
        else 
            return {-1,-1};
    }
};
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
