アルゴリズムの問題は - のみデジタル1回発生します

二つの数の整数型配列に加えて、他の数字が二回表示されます。これら二つの数字は1度だけ表示を見つけるためにプログラムを書いてください

// NUM1、NUM2長さ1のそれぞれアレイ。送信パラメータ
 // 意志NUM1 [0]、NUM2 [0 ] の結果を返すように設定されている
パブリック クラスソリューション{
     公共 静的 ボイド FindNumsAppearOnce(INT []配列、INT NUM1 []、INT NUM2を[]){
         IF(配列== NULL。Array.lengthと|| <= 1である){ 
            NUM1 [ 0] = NUM2 [0] = 0 ;
             リターン; 
        } 
        int型 LEN = Array.lengthと、インデックス= 0、SUM = 0である;
         のためにINT I = 0; I <LEN ; I ++ ){ 
            SUM^ = 配列[I]; 
        } 
        ための(、インデックス<32;インデックス++インデックス= 0 ){
             IF((SUM&(1 <<インデックスが))= 0。!)BREAK ; 
        } 
        ためINT I = 0; I <LEN ; I ++ ){
             IF!((配列[I] - (1 <<インデックス))= 0 ){ 
                NUM2 [ 0] ^ = 配列[I]; 
            } そうでなければ{ 
                [NUM1 0] ^ = 配列[I]; 
            } 
        } 
    } 
/ ** 
     *番号の配列の一方のみが一度表示され、他の人がこの番号を見つけるために二回数を受けている
     * @paramを A
     *@return 
     * / 
    パブリック 静的 INT find1From2(INT [] A){
         int型 LEN = a.length、RES = 0 ;
         のためのINT I = 0; I <LEN; I ++ ){ 
            RES = RES ^ A [I]; 
        } 
        戻りRES; 
    } 
/ ** 
     *配列番号は、一度だけ表示され、他の図面には、この番号を見つけるために、三回発生した
     * @param 
     * @return * / パブリック静的INT find1From3(INT [] A){
         int型 []ビット= 新しい新しい
     
       INT RES。[32 ]。
        int型のlen = a.length;
        以下のためにINT I 0 =; I <LEN; I ++ ){
             ためINT J = 0であり、j <32; J ++ ){ 
                ビット[J] =ビット[J] +(([I] >>> J)& 1 ); 
            } 
        } 
        int型 RES = 0 以下のためにINT ; I <32; iが0 = I ++ ){
             場合(!ビット[I]%3 = 0 ){ 
                RES = RESを| (1つの<< I)。
            } 
        } 
        戻り
    } 
}

 

おすすめ

転載: www.cnblogs.com/mxj961116/p/11918608.html