2012-04-18 13 views
1

私は学校の宿題に取り組んでいます。 2 int[]アレイを作成する必要があります。最初の配列int[10]は、ランダムintegersで埋められています。 2番目の配列は、最初の配列と同じ番号を持ちますが、重複はありません。2つの配列を作成する - 1番目はランダムな整数、2番目は固有のランダムな整数です

たとえば、最初の配列が1,2,2,3,1,5,5,7,9,9であるとします。私の2番目の配列は1,2,3,5,7,9になります。

誰かがこの問題を解決するための正しい方向で私を指摘してくれますか?

+3

宿題についての質問は、常に宿題タグを追加してください。 –

+5

aaaand ...あなたはこれまでに何を試しましたか – Dan

答えて

1

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; 
     } 

今、この機能を使用します。私はその部分を理解するためにあなたを残す。結局のところ宿題だ!

+0

甘い!私は先生が探していたものだと思います。 私はここからそれを得ました:) ありがとう! –

+0

どこに解決策を投稿するのですか? –

2

私は(それが宿題であると仮定すると、あなたがあまりにも複雑な何もするべきではありません)、次の操作を行います...

  1. java.util.Arrays.sort(myArray);を使用して配列をソートする - これは数字を注文し、確認しますすべての繰り返し番号はお互いに隣り合っています。配列による
  2. ループとユニークな番号の数のカウントを保持 - のお二int[]配列を作成します
  3. (つまり、次の番号に現在の数を比較することにより、1カウンタをインクリメント、それらが異なるなら)正しいサイズ(ポイント2から)
  4. ポイント2と同じプロセスを繰り返しますが、カウンタをインクリメントするのではなく、新しいアレイに一意の数字を入力してください。

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

+0

優秀な人が手助けしました!私はコードであなたに戻ってきます!ありがとう:) –

+0

喜んで助けてください。あなたの質問が解決された場合は、受け入れられた答えに「目を向ける」ことを覚えておいてください。 – wattostudios

4

Setに数値を入力します。その後、セットから数値を取得します。シンプル!重複は自動的に削除されます!

+0

しかしこれは宿題のために複雑すぎるでしょうか?疑問は、ポスターがJavaについて初めてのことであり、おそらく配列について学習しているように見えるので、 'Set'を使うのは技術的すぎるかもしれないと思いますか?おそらく、 – wattostudios

+0

しかし、彼はセットを使用するためのボーナスポイントを得ることができました! :D – CodeBlue

+0

:-)それは試してみる価値があります – wattostudios

0

ヒント(ワトーはそれをよりよく説明):

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] 
0

@WATTOスタジオには良い方法があります。ソートは、重複が含まれている場合に常に役に立ちます。

Iは、ハッシュテーブルを使用して別の方法を提案する。

  1. キーとして整数(元の配列内の数)と値としてカウンタとハッシュ構造を作成します。
  2. 元の配列を調べ、遭遇した番号ごとにハッシュテーブル内の対応するカウンタ値をインクリメントします。
  3. 元の配列をもう一度参照してください。各番号について、ハッシュテーブルをチェックバックします。関連するカウンタが1より大きい場合は、値を削除してカウンタを減分します。

のは、実用的なケースを見てみましょう:

4 5 6 4 1 1 3 

最初のパスは、次の表を作成します:ステップバイ

​​

セカンドパスステップ:

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の場合は、その項目を削除します。
関連する問題