コーディング面接の質問です。配列が与えられ、swap 関数のみrandom_arr
を使用して並べ替える必要があります。
また、各要素のスワップ数random_arr
も制限されています。このparent_arr
ために、 の各要素のスワップ数を含む配列が与えられますrandom_arr
。
制約:
- スワップ機能を使用する必要があります。
- 各要素は、最小 5 回、最大 26 回繰り返すことができます。
- 指定された配列の要素を 0 にすることはできません。
- ヘルパー関数を記述しないでください。
parent_arr
宣言の仕方を説明します。次のような場合parent_arr
:
parent_arr[] = {a,b,c,d,...,z} の場合
a can be swapped at most one time.
b can be swapped at most two times.
parent_arr[] = {c,b,a,....,z} の場合
c can be swapped at most one time.
b can be swapped at most two times.
a can be swapped at most three times
私の解決策:
random_arr[] の各要素について、ソートされている場合、その下にある要素の数を格納します。次に、parent_arr[] からスワップ カウントが最小の要素を選択し、random_arr[] に存在するかどうかを確認します。「はい」で、それが複数回発生している場合は、配置できる場所が複数あります。次に、最大のスワップカウントで位置(むしろその位置の要素、貴重な)を選択してスワップします。次に、その要素のスワップ カウントを減らし、parent_arr[] を並べ替えて、プロセスを繰り返します。
しかし、それは非常に非効率的であり、その正しさを証明することはできません. 何か案は?