問題: https://leetcode.com/problems/three-equal-parts/
まず、Xで示される検出1の数は、時計は3の倍数ではありません。それはしない対応する分割がないことを示しています。
0の終了を検出した後、終了時のゼロの数として各2進数が、Yで表されます。
最後に、1つの1/3 * X Aの合計を含む、三つの連続、ばらばらの存在を検出する、文字列の端部が存在する場合、答えを返し、0(0除去プリアンブル)に等しいY有します。
クラス解決{ パブリック: ベクトル < INT > threeEqualParts(ベクトル< INT >&A){ ベクトル < INT > RES。 int型の NUMS = 0 ; INT、N = A.size()。 INTゼロ= 0 。 以下のために(int型 I = N - 1 ; I> = 0 ; i-- ) { 場合([I] == 1)破ります。 ゼロ ++ ; } のために(int型 i = 0 ; iがn <I ++の) { 場合([I] == 1)NUMS ++ 。 } もし(NUMSの== 0 ) { リターン { 0、N - 1 }。 } であれば(NUMS%3)リターン { - 1、 - 1 }。 int型の数= NUMS / 3 。 文字列ターゲット。 int型私= 0 ; 以下のための(int型のk = 0。K < 3 ; kは++ ) { 文字列STR。 int型 one_nums = 0 ; int型 zero_nums = 0 ; 用(; iがn <; iは++ ) { 場合(one_nums ==カウント&& zero_nums ==ゼロ)破ります。 もし([I] == 0 ) { 場合(one_nums == カウント) { zero_nums ++ 。 } もし(!str.empty()) str.push_back(A [i])と、 } そう であれば([I] == 1 ) { 場合(one_nums == カウント) { リターン { - 1、 - 1 }。 } one_nums ++ 。 str.push_back([I])。 } } もし(target.empty()) { ターゲット = STR。 } 他 { 場合(!目標= STR)リターン { - 1、 - 1 }。 } もし(K == 0)res.push_back(I - 1 )。 それ以外の 場合(K == 1 )res.push_back(I); } 戻りRESと、 } }。