二つの数の整数型配列に加えて、他の数字が二回表示されます。これら二つの数字は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)。 } } 戻り } }