最近、職場で解決すべき問題がありました。マスターリストと、マスターリスト内のアイテムのサブセットが異なる順序で含まれている可能性がある2つのリストがありました。リストにないアイテムの順序を変更せず、可能な限り同じ場所にアイテムを保持することなく、サブセット内のアイテムが同じ順序で表示されるように、マスターリストを並べ替える必要がありました。さて、それはおそらく混乱を招くように聞こえるので、私はそれを分解します:
- マスターリストは、アイテムのデフォルトの順序を定義します。
- サブセットリストは、特定のアイテムの相対的な順序を定義します。
- マスターリストに2つの要素があり、サブセットリストに従って順序が狂っている場合、マスターリストの前の項目は、サブセットリスト内の他の項目に対して正しい位置にある最も早いインデックスに移動する必要があります。(つまり、後の項目の直後)
あなたの仕事は、この並べ替えアルゴリズムを実装することです。
テストケースの例
Master: [1, 2, 3]
Subset: []
Result: [1, 2, 3]
Master: [9001, 42, 69, 1337, 420]
Subset: [69]
Result: [9001, 42, 69, 1337, 420]
Master: [9001, 42, 69, 1337, 420, 99, 255]
Subset: [69, 9001, 1337]
Result: [42, 69, 9001, 1337, 420, 99, 255]
Master: [1, 2, 3, 4, 5]
Subset: [2, 5]
Result: [1, 2, 3, 4, 5]
Master: [apple, banana, carrot, duck, elephant]
Subset: [duck, apple]
Result: [banana, carrot, duck, apple, elephant]
Master: [Alice, Betty, Carol, Debbie, Elaine, Felicia, Georgia, Helen, Ilene, Julia]
Subset: [Betty, Felicia, Carol, Julia]
Result: [Alice, Betty, Debbie, Elaine, Felicia, Carol, Georgia, Helen, Ilene, Julia]
Master: [snake, lizard, frog, werewolf, vulture, dog, human]
Subset: [snake, werewolf, lizard, human, dog]
Result: [snake, frog, werewolf, lizard, vulture, human, dog]
Master: [Pete, Rob, Jeff, Stan, Chris, Doug, Reggie, Paul, Alex]
Subset: [Jeff, Stan, Pete, Paul]
Result: [Rob, Jeff, Stan, Pete, Chris, Doug, Reggie, Paul, Alex]
Master: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Subset: [8, 1, 2, 12, 11, 10]
Result: [3, 4, 5, 6, 7, 8, 1, 2, 9, 12, 11, 10]
Master: [lol, rofl, lmao, roflmao, lqtm, smh, jk, wat]
Subset: [wat, lmao, rofl]
Result: [lol, roflmao, lqtm, smh, jk, wat, lmao, rofl]
ルール
- 標準的な抜け穴、ヤッダ、ヤッダ、便利なI / O、なんとか。
- 例では数値と文字列を使用しますが、整数、文字列、または言語で便利な場合は異種リストを含む明確に定義された等式セマンティクスを持つ他の何かであるかどうかにかかわらず、1つの要素タイプのみをサポートする必要があります。
- マスターリストとサブセットリストの両方に重複がないと仮定できます
- サブセットリストで見つかったすべてのアイテムがマスターリストで見つかったと想定できます。
- どちらのリストも空かもしれません
- 少なくとも、100要素までの配列をサポートする必要があります。
- 並べ替えは、インプレースで、または新しいリスト/配列の作成を通じて実装できます。
ハッピーゴルフ!
8 1 3 4 5 6 7 2 9 12 11 10
最後から2番目の1への有効な解決策は?