学校の宿題に取り組んでいます。int[]
2 つの配列を作成する必要があります。最初の配列int[10]
は random で埋められintegers
ます。2 番目の配列には、最初の配列と同じ番号が含まれていますが、重複はありません。
たとえば、最初の配列が1,2,2,3,1,5,5,7,9,9
. 私の2番目の配列は1,2,3,5,7,9
.
誰かがこの問題を解決するための正しい方向を教えてください。
学校の宿題に取り組んでいます。int[]
2 つの配列を作成する必要があります。最初の配列int[10]
は random で埋められintegers
ます。2 番目の配列には、最初の配列と同じ番号が含まれていますが、重複はありません。
たとえば、最初の配列が1,2,2,3,1,5,5,7,9,9
. 私の2番目の配列は1,2,3,5,7,9
.
誰かがこの問題を解決するための正しい方向を教えてください。
数値をSetに入れます。次に、セットから数値を取得します。単純!重複は自動的に削除されます!
私は次のことをします(それが宿題であり、あなたがあまり複雑なことをするべきではないと仮定して)...
java.util.Arrays.sort(myArray);
ます。これにより、番号が並べ替えられ、すべての繰り返し番号が隣り合っていることを確認します。int[]
2番目の配列を正しいサイズで作成します(ポイント2から)これはあなたが正しい方向に動くのに十分なはずです。コードがある場合でも質問がある場合は、私たちに戻って質問してください。
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;
}
新しい配列に挿入する前に、この関数を使用してください。その部分を理解するのはあなたに任せます。やっぱり宿題です!
ヒント (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]
@WATTO Studios には良いアプローチがあります。並べ替えは、重複が含まれる場合に常に役立ちます。
ハッシュ テーブルを使用した別の方法を提案します。
実際のケースを見てみましょう:
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
もちろん、たとえばリンクされたリストに項目を挿入するなど、削除を処理するより効率的な方法があります (配列の使用はシフトを意味するため)。あなたに決めさせます。:)
編集:シングルパスを必要とするさらに高速なアプローチ: