Pyth, 17 byte
uXGhaf>FT.:G2]Z)Q
Berpindah item dalam daftar benar-benar mahal di Pyth. Jadi, inilah solusi yang menyenangkan, yang sedikit meregangkan aturan. Itu mungkin tidak valid.
Cobalah secara online: Pyth Compiler / Executor
Penjelasan
Pertama-tama, kompleksitas waktu kode saya adalah O(n^3)
. Tapi ini bukan bagian yang menarik. Pertanyaannya tidak mengatakan apa pun tentang kerumitannya.
Bagian penting adalah, bagaimana saya mengganti dua elemen dalam daftar. Katakanlah saya ingin mengganti elemen m[3]
dan m[4]
. Saya tidak peduli dengan indeks 3
dan 4
sama sekali. Saya cukup membuat daftar kedua, yang menggantikan setiap elemen sama m[3]
dengan angka m[4]
dan setiap angka sama m[4]
dengan nilai m[3]
. Karena daftar tidak mengandung duplikat, ini mensimulasikan beralih dua nilai ini. Jika ada duplikat, seperti pada input [1, 3, 2, 2]
, hasilnya akan menjadi [1, 2, 3, 3]
. Dan jika Anda memberi input [1, 2, 1]
, itu akan berakhir dalam loop yang tak terbatas. Saya tidak secara eksplisit membuat daftar kedua, itu hanya bagian dari implementasi Pyth tentang metode translate. Jika Anda mencetak daftar saat ini ( lihat di sini), ini memberikan nilai yang benar, yang Anda harapkan.
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