1. Wykorzystując O (1) dodatkową przestrzeń, w czasie O (n log n)
Jest to możliwe na przykład:
- Najpierw wykonaj sortowanie w miejscu O (n log n)
- następnie przejrzyj listę raz, zapisując pierwsze wystąpienie każdego z powrotem na początek listy
Uważam, że partner firmy ejel ma rację, że najlepszym sposobem na zrobienie tego byłoby sortowanie przez scalanie na miejscu z uproszczonym krokiem scalania i prawdopodobnie taki jest cel pytania, jeśli np. napisanie nowej funkcji bibliotecznej, aby robić to tak wydajnie, jak to możliwe, bez możliwości ulepszania danych wejściowych, a byłyby przypadki, gdy byłoby to przydatne bez tablicy mieszającej, w zależności od rodzaju danych wejściowych. Ale tak naprawdę tego nie sprawdziłem.
2. Wykorzystanie O (partii) dodatkowej przestrzeni w czasie O (n)
- zadeklaruj tablicę zerową wystarczająco dużą, aby pomieścić wszystkie liczby całkowite
- raz przejść przez tablicę
- ustaw odpowiedni element tablicy na 1 dla każdej liczby całkowitej.
- Jeśli była już 1, pomiń tę liczbę całkowitą.
Działa to tylko wtedy, gdy istnieje kilka wątpliwych założeń:
- możliwe jest tanie zerowanie pamięci lub rozmiar int jest mały w porównaniu z ich liczbą
- z przyjemnością poprosisz swój system operacyjny o 256 ^ sizepof (int) pamięci
- i zapisze go w pamięci podręcznej naprawdę, naprawdę wydajnie, jeśli jest gigantyczny
To zła odpowiedź, ale jeśli masz DUŻO elementów wejściowych, ale wszystkie są 8-bitowymi liczbami całkowitymi (a może nawet 16-bitowymi liczbami całkowitymi), może to być najlepszy sposób.
3. O (mało) -ish dodatkowa przestrzeń, O (n) -ish czas
Jak # 2, ale użyj tabeli skrótów.
4. Przejrzysta droga
Jeśli liczba elementów jest mała, napisanie odpowiedniego algorytmu nie jest przydatne, jeśli inny kod jest szybszy do napisania i szybszy do odczytania.
Na przykład. Przejdź przez tablicę dla każdego unikalnego elementu (tj. Pierwszy element, drugi element (duplikaty pierwszego zostały usunięte) itp.), Usuwając wszystkie identyczne elementy. O (1) dodatkowa spacja, O (n ^ 2) czas.
Na przykład. Użyj funkcji bibliotecznych, które to robią. wydajność zależy od tego, co masz łatwo dostępne.