1

学校の宿題に取り組んでいます。int[]2 つの配列を作成する必要があります。最初の配列int[10]は random で埋められintegersます。2 番目の配列には、最初の配列と同じ番号が含まれていますが、重複はありません。

たとえば、最初の配列が1,2,2,3,1,5,5,7,9,9. 私の2番目の配列は1,2,3,5,7,9.

誰かがこの問題を解決するための正しい方向を教えてください。

4

5 に答える 5

4

数値をSetに入れます。次に、セットから数値を取得します。単純!重複は自動的に削除されます!

于 2012-04-18T13:31:02.713 に答える
2

私は次のことをします(それが宿題であり、あなたがあまり複雑なことをするべきではないと仮定して)...

  1. -を使用して配列を並べ替えjava.util.Arrays.sort(myArray);ます。これにより、番号が並べ替えられ、すべての繰り返し番号が隣り合っていることを確認します。
  2. 配列をループして、一意の番号の数をカウントします(つまり、現在の番号を次の番号と比較します。異なる場合は、カウンターを1つ増やします)
  3. int[]2番目の配列を正しいサイズで作成します(ポイント2から)
  4. ポイント2と同じプロセスを繰り返しますが、カウンターをインクリメントするのではなく、新しい配列に一意の番号を入力します。

これはあなたが正しい方向に動くのに十分なはずです。コードがある場合でも質問がある場合は、私たちに戻って質問してください。

于 2012-04-18T13:29:19.257 に答える
1

Setを使用することをお勧めしますが、 Set を使用せずに行う方法を次に示します。(注: これは機能しますが、効率については聞かないでください!)

このような機能を持っています -

   public static boolean isNumberInArray(int[] array, int number) 
      {
          for(int i=0; i<array.length; i++)
           {
                if(number == array[i])
                   return true;
           }
          return false;
      }

新しい配列に挿入する前に、この関数を使用してください。その部分を理解するのはあなたに任せます。やっぱり宿題です!

于 2012-04-18T13:43:53.700 に答える
0

ヒント (WATTO がより適切に説明しています):

a = sorted first array
lastItem = a[0]
append lastItem into new array
for i in 1 to length(a):
   if a[i] != lastItem:
      append a[i] into new array
      lastItem = a[i]
于 2012-04-18T13:34:52.090 に答える
0

@WATTO Studios には良いアプローチがあります。並べ替えは、重複が含まれる場合に常に役立ちます。

ハッシュ テーブルを使用した別の方法を提案します。

  1. 整数をキー (元の配列の数値) とし、カウンターを値とするハッシュ構造を作成します。
  2. 元の配列を調べて、発生した各数値について、ハッシュ テーブル内の対応するカウンター値をインクリメントします。
  3. 元の配列をもう一度調べます。各番号について、ハッシュ テーブルを確認します。関連付けられているカウンターが 1 より大きい場合は、値を削除してカウンターを減らします。

実際のケースを見てみましょう:

4 5 6 4 1 1 3

最初のパスでは、次のテーブルが作成されます。

1 -> 2
3 -> 1
4 -> 2
5 -> 1
6 -> 1

2回目のパスバイステップ:

4 5 6 4 1 1 3
^

4 has a counter of 2 -> remove and decrement:

1 -> 2
3 -> 1
4 -> 1
5 -> 1
6 -> 1

5 6 4 1 1 3
^

5 has a counter of 1 -> ignore 
6 has a counter of 1 -> ignore 
4 has a counter of 1 -> ignore 
1 has a counter of 2 -> remove and decrement

1 -> 1
3 -> 1
4 -> 1
5 -> 1
6 -> 1

5 6 4 1 3
      ^    
1 has a counter of 1 -> ignore
3 has a counter of 1 -> ignore

最終配列:

5 6 4 1 3

もちろん、たとえばリンクされたリストに項目を挿入するなど、削除を処理するより効率的な方法があります (配列の使用はシフトを意味するため)。あなたに決めさせます。:)

編集:シングルパスを必要とするさらに高速なアプローチ:

  1. 上記と同じハッシュ構造を使用します。
  2. 元の配列を調べます。各項目について、表を確認してください。関連付けられたカウンターが 0 の場合は、1 にインクリメントします。既に 1 の場合は、アイテムを削除します。
于 2012-04-18T13:34:54.993 に答える