質問: 配列の中に複数存在する数がいくつあるか お世話になります。配列の中に同じ数が存在する数がいくつあるかを調べたいのですが、途中でつまづいてしまいました。 例えば配列arrayの中に、0, 0, 5, 0, 5, 1, 5といった数が格納されているとしたら 複数ある数は0と5の2つなので、2を返す、というだけのプログラムです。 int n=array.length; int cnt=0; for(int i=0;i
回答: (案1) チェックする配列と同じ要素数を持つboolean配列を用意し、 対象配列番号が重複検出済みかどうかを表すフラグとして使う。 重複数値(array[i]==array[j])を見つけたら、 その配列番号の重複検出済みフラグをonにする。 (jのループはbreakしないで、他の同じ数値も重複検出済みに する必要がある。cnt++はjのループ後にする。) 各配列の数値をチェックする前に、重複検出済みフラグが onか確認し、onだったら、チェックをスキップする。 (案2) チェックする配列の半分の要素数を持つint配列を用意し、 「重複数値格納配列」として使用する。 同じ数値(array[i]==array[j])を見つけたら、 「重複数値格納配列」にその数値を格納し、 格納位置の配列番号をカウントアップする。 各配列の数値をチェックする前に、「重複数値格納配列」 の中にこれからチェックする数値が存在するか 確認し、存在していたらチェックをスキップする。 「重複数値格納配列」の最終格納位置が、重複数値 検出数になる。 (案3) 配列を一旦小さい順にソートしてからチェックする。 ソートアルゴリズムは有名なものを参考に。 その後のチェックの仕方はわかると思います。 どれが一番効率いいんでしょうね・・