チャレンジ
整数の空でない配列が与えられた場合、例えば:
[5, 2, 7, 6, 4, 1, 3]
最初に、前のアイテムよりも大きいアイテムがない配列(つまり、非昇順配列)にそれを切断します。
[5, 2] [7, 6, 4, 1] [3]
次に、各配列を逆にします。
[2, 5] [1, 4, 6, 7] [3]
最後に、それらをすべて連結します。
[2, 5, 1, 4, 6, 7, 3]
これは、プログラムの出力/関数が返すものでなければなりません。この手順を十分に繰り返すと、配列が完全にソートされます。
ルール
- 入力および出力は、任意の標準的な方法で提供され、適切な配列形式で行われます。
- 入力配列が空になることはありませんが、マイナスや重複が含まれる場合があります。
- 各整数の絶対値は常に2 31未満です。
テストケース
うまくいけば、これらはすべてのエッジケースをカバーします:
[1] -> [1]
[1, 1] -> [1, 1]
[1, 2] -> [1, 2]
[2, 1] -> [1, 2]
[2, 3, 1] -> [2, 1, 3]
[2, 1, 3] -> [1, 2, 3]
[2, 1, 2] -> [1, 2, 2]
[2, 1, 1] -> [1, 1, 2]
[3, 1, 1, 2] -> [1, 1, 3, 2]
[3, 2, 1, 2] -> [1, 2, 3, 2]
[3, 1, 2, 2] -> [1, 3, 2, 2]
[1, 3, 2, 2] -> [1, 2, 2, 3]
[1, 0, 5, -234] -> [0, 1, -234, 5]
[1, 0, 1, 0, 1] -> [0, 1, 0, 1, 1]
[1, 2, 3, 4, 5] -> [1, 2, 3, 4, 5]
[5, 4, 3, 2, 1] -> [1, 2, 3, 4, 5]
[2, 1, 5, 4, 3] -> [1, 2, 3, 4, 5]
[2, 3, 1, 5, 4] -> [2, 1, 3, 4, 5]
[5, 1, 4, 2, 3] -> [1, 5, 2, 4, 3]
[5, 2, 7, 6, 4, 1, 3] -> [2, 5, 1, 4, 6, 7, 3]
[-5, -2, -7, -6, -4, -1, -3] -> [-5, -7, -2, -6, -4, -3, -1]
[14, 5, 3, 8, 15, 7, 4, 19, 12, 0, 2, 18, 6, 11, 13, 1, 17, 16, 10, 9] -> [3, 5, 14, 8, 4, 7, 15, 0, 12, 19, 2, 6, 18, 11, 1, 13, 9, 10, 16, 17]
得点
これはcode-golfであるため、バイト単位の最短コードが優先されます。
O(n^2)
O(n)
。最初と最後の要素を交換し、次に中間停止点に到達したときに2番目と2番目の要素を交換します。
O(n)
、逆転はアルゴリズムに直接組み込むことができます(これが私のJSの答えです)。各反復は配列内の各項目を1回ループするため、単一の反復はO(n)
です。(私は思う...)