面接でわからない質問があります。サイズ N の配列が与えられた場合、サブセット内の要素が互いに最も離れているようなサイズ k のサブセットを見つけます。つまり、要素間のペアごとの最小距離を最大化します。
Example:
Array = [1,2,6,10]
k = 3
answer = [1,6,10]
ブルートフォースの方法では、実行時に指数関数的であるサイズ k のすべてのサブセットを見つける必要があります。
私が持っていた 1 つのアイデアは、配列から等間隔に値を取得することでした。これが意味することは
- 最初と最後の要素を取る
- それらの差(この場合は10-1)を見つけ、それをkで割ります((10-1)/ 3 = 3)
- 両端から 2 つのポインターを内側に移動し、前の選択から +/- 3 の要素を選択します。この場合、1 と 10 から始めて、4 と 7 に最も近い要素を見つけます。それは 6 になります。
これは、エレメントをできるだけ均等に配置する必要があるという直感に基づいています。それが機能する/機能しないことを証明する方法がわかりません。誰かが方法を知っているか、より良いアルゴリズムを持っている場合は、共有してください。ありがとう!