Zadałem już to pytanie przy przepełnieniu stosu , ale może lepiej pasuje do tej witryny.
Problemem jest:
Mam N par liczb całkowitych bez znaku. Muszę je posortować. Wektor końcowy par należy posortować nie malejąco według pierwszej liczby w każdej parze i nieskończenie według drugiej liczby w każdej parze. Każda para może zamieniać pierwszy i drugi element w dowolnym momencie. Czasami nie ma rozwiązania, więc muszę rzucić wyjątek.
Przykład:
in pairs:
1 5
7 1
3 8
5 6
out pairs:
1 7 <-- swapped
1 5
6 5 <-- swapped
8 3 <-- swapped
^^ Bez zamiany par niemożliwe jest zbudowanie rozwiązania. Zamieniamy więc pary (7, 1), (3, 8) i (5, 6) i budujemy wynik. lub
in pairs:
1 5
6 9
out:
not possible
Dzięki
edytować:
Tom Sirgedas w SO zaproponował najlepsze rozwiązanie . Jest naprawdę łatwy do wdrożenia i działa w O (log (n) * n). Dziękujemy wszystkim za odpowiedzi i zainteresowanie. Naprawdę podobała mi się analiza mjqxxxx.