2

私は単純な問題を抱えており、それを達成するための迅速な方法が必要です。次のような2つの列があるとします

1 6 
3 5
5 3 

ご覧のとおり、要素 3 と 5 は 2 列目にあります。2 列目に一致する要素がないように、1 列目に新しいランダム要素を生成したいと思います。要素は 1 ->12 から指定できます

私のアプローチ: 2 列目のすべての要素をハッシュ セットに追加してから、1 列目の要素を検索し、それらがハッシュ セットに含まれているかどうかを確認します。それが正しい場合は、新しいランダム要素の生成を試みます。

問題を1D配列として視覚化し、重複を削除するなどの別のアイデアがありますが、2番目の配列の要素を変更したくありません。

4

4 に答える 4

0

次の手順を使用できます。 1. アレイを作成します。2. 最小値から最大値まで入力します。3. アレイをサッフルします。配列を順次読み取ります。

suffle に Fisher–Yates shuffle Algorithm を使用する

于 2013-11-12T07:07:08.173 に答える
0

このアプローチがうまくいくと思います。1 から 12 までの各数値について、その数値が列 2 にない場合は、それをリストに追加します。列 1 が埋まっていない間に、リストから項目をランダムに選択して削除し、列 1 に追加します。

于 2013-11-12T04:26:04.237 に答える
0
  1. column2に値を入れますHashSet

  2. (Math.random() * 12)+11 から 12 までの数値を生成する which を 使用するだけです。

  3. 次に、生成された数値が存在するかどうかを検索しset、存在する場合setは再生成します。つまり、ステップ 2 に進み、そうでない場合は完了します。

それが役に立てば幸い。

編集

O(1)

私はほんの小さなサンプル、つまり5を取っています

  1. 最初に 1 ~ 5 を含む配列を作成しますa [] = {1, 2, 3, 4, 5}
  2. ここで、1 から 5 までの乱数を生成してみます (ここでは、配列のインデックスを生成しています)。最後の要素を 2 に置き換えるよりも 2 を生成するとします。したがって、配列は a[] = {1, 5, 3, 4} になり、インデックス値を減らします。
  3. ここで、1 から 4 までの乱数を生成する必要があります。3 と最後の値を交換するよりも 3 と仮定しましょう。したがって、配列は {1, 5, 4} です。インデックスをデクリメントします。つまり、今は 3 です。
于 2013-11-12T00:20:25.990 に答える