Pyth、17バイト
uXGhaf>FT.:G2]Z)Q
リスト内のアイテムの切り替えは、Pythでは非常に高価です。だからここに楽しい解決策があります、それはルールを少し伸ばします。おそらく無効です。
オンラインで試す:Pyth Compiler / Executor
説明
まず、コードの時間の複雑さはO(n^3)
です。しかし、これは興味深い部分ではありません。質問は複雑さについては何も述べていません。
重要なのは、リストの2つの要素を切り替える方法です。要素m[3]
とを切り替えたいとしましょうm[4]
。私は、インデックスを気にしない3
と4
、すべてで。私は単に2番目のリストを作成します。これは、すべての等しい要素をm[3]
数値にm[4]
、すべての等しいm[4]
数値を値に置き換えますm[3]
。リストには重複が含まれていないため、これはこれら2つの値の切り替えをシミュレートします。入力のように重複がある場合[1, 3, 2, 2]
、出力はになります[1, 2, 3, 3]
。そして、入力を与えると[1, 2, 1]
、それは無限ループで終わります。私は明示的に2番目のリストを作成しません。それは、Pythの変換メソッドの実装の一部にすぎません。現在のリストを印刷する場合(ここを参照))、それはあなたが期待する正しい値を与えます。
implicit: Q = input list
u Q set G = Q, update G as long with the following statements,
until it stops changing:
.:G2 all pairs (G[i],G[i+1])
f>FT filter for pairs T, where T[0] > T[1]
a ]Z add to this list of pairs [0]
(ensures that the filtered list is always non-empty)
h take the first element
XG ) translate G by this pair (switches the values T[0] with T[1])
print implicitly at the end