- 配列を考えると、配列は、それが含まれているか否かが判断されます。連ですべての配列要素の出力は、trueを返した場合、そうでない場合は、falseを返します。
- 例では、数値の配列として、出力[2,3,5]は、trueを返し
INT []番号= {1,3,4,5,5,3,2,3,2,2,2}。
1.アイデア
隣接の比較に続いて2つの今昇順ソート(または降順)に従って配列要素番号は、同じ2つの要素と、要素は、アレイ複製に格納された、繰り返しました。
なお、複数ある場合(3以上)同じ隣人、反復配列要素複製も発生し、もし同じ4つの隣接する要素2 {2,2,2,2}、前の練習によると、複製配列は、(3つの連続での比較結果が同じであるため)3 2を持っています、タイトルは需要を満たしていません。
このバグ2(現在のブロガーが2つだけと考えることができます)を回避する方法があります。
1)連続番号の比較、現在の反復要素はアレイを複製するかどうかを判断します。次のようにアイデアは以下のとおりです。
比較int型のカウント= 0;
用(.......ソートされた配列番号を横断した後...){
IF(配列要素で==現在の配列要素)
一時++;
(1 ==比較の数であれば)なら
複製の配列に現在繰り返しエレメント。
他
= 0の比較の数。
}
ユニークな要素 - 2)の特性のセットを使用して設定。次のように簡単なアイデアがあります
ソートされた配列番号を横断しながらセットは、(次の現在の配列要素の配列要素を== &&セットは、現在の配列要素が含まれていない)場合に満たされるセットに加え、要素オブジェクトのセットを定義します
2の参照コード
1 輸入 java.utilの。* ; 2 3 パブリック クラスTEST { 4 パブリック 静的 ボイドメイン(文字列[]引数){ 5 TESTさt = 新しいテスト(); 6 INT []番号= {1,3,4,5,5,3,2,3,2,2,2 }。 7 INT [] DUP = 新しい INT [numbers.length / 2 + 1 ]。 8 9 のSystem.out.println( "原番号数组:" )。 10 のために(int型 ; iがnumbers.lengthを<I ++は、I = 0 ){ 11 System.out.println( "番号[" + I + "]" + 数字[I])。 12 } 13 14 であれば(t.duplicate(数字、numbers.length)、DUP) 15 { 16 のSystem.out.println( "含有重复元素DUP:" )。 17 のためには、(int型 0 = Iと、iは<dup.length; iは++ ){ 18 のSystem.out.println( "DUP [" + I + "]" + DUP [I])。 19 } 20 } 21 22 } 23 公共 ブール重複(INT []数字、int型の長さは、INT []複製){ 24 IF(番号== NULL ||長さ== 0 ) 25 リターン falseに、 26である 27 ;は、Arrays.sort(番号) 28 29 のint duplen TEMP = 0、J = 0、= 0 ; 30 用(int型 I = 0; Iは-lengthを<1; Iは++ ){ 31である 場合(番号[I] ==数字は[I + 1。]){ 32 TEMP ++ ; 33である * / 34れている 二つの隣接する値と場合にのみあれば*同じ時間(TEMP == 1)、行くために、重複配列の重複を蓄積する 35 4回2 {2,2,2,2}比較、同じ合計として三の以上の隣接する一連の値がある場合* 36 * {2,2}は初めて、TEMP ++ == 1を比較するには、重複して格納することができますアレイは、{2,2,2}と2つの比較++ == 2 TEMP、TEMP。3 ++ == 37 (TEMPは== 1)、それは複製が以前にデータ保存できない場合* TEMPの値が条件を満たしていない 38 * * / 39 IF(TEMP == 1 ){ 40 複製[J ++] = 番号[I]; 41れる ++ duplen ; 42である } 43である } 他{ 44が TEMP = 0 ;} 45 } 46は IF(== 0 duplen ){ 47 リターン 偽。 48 } 他{ 49 リターン 真。 50 } 51 } 52 }