Pyth, 17 Bytes
uXGhaf>FT.:G2]Z)Q
Das Wechseln von Elementen in einer Liste ist in Pyth sehr teuer. Hier ist also eine unterhaltsame Lösung, die die Regeln ein wenig erweitert. Es ist wahrscheinlich nicht gültig.
Probieren Sie es online aus: Pyth Compiler / Executor
Erläuterung
Zuallererst ist die zeitliche Komplexität meines Codes O(n^3)
. Dies ist jedoch nicht der interessante Teil. Die Frage sagt nichts über die Komplexität aus.
Der entscheidende Teil ist, wie ich zwei Elemente in der Liste wechsle. Angenommen, ich möchte die Elemente m[3]
und wechseln m[4]
. Ich kümmere mich nicht um die Indizes 3
und 4
überhaupt. Ich erstelle einfach eine zweite Liste, die jedes Element, das gleich ist, m[3]
durch die Zahl m[4]
und jede Zahl, die gleich m[4]
dem Wert ist, ersetzt m[3]
. Da die Liste keine Duplikate enthält, wird das Umschalten dieser beiden Werte simuliert. Wenn es Duplikate wie in der Eingabe [1, 3, 2, 2]
gäbe, wäre die Ausgabe [1, 2, 3, 3]
. Und wenn Sie die Eingabe geben [1, 2, 1]
, würde sie in einer Endlosschleife enden. Ich erstelle die zweite Liste nicht explizit, sie ist nur ein Teil von Pyths Implementierung der Übersetzungsmethode. Wenn Sie die aktuellen Listen ausdrucken ( siehe hier) gibt es die richtigen Werte, die Sie erwarten würden.
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