[贪心] leetcode 927三等分

問題:  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 = 0K < 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と、
    } 
}。

 

おすすめ

転載: www.cnblogs.com/fish1996/p/11366538.html