Użyj hash table, w którym wstawisz każdy element. Przed wstawieniem elementu sprawdź, czy już go tam masz. Jeśli tak, masz duplikat. To jest O(n)
średnio, ale najgorszy przypadek jest tak samo zły jak twoja obecna metoda.
Alternatywnie możesz użyć set, aby zrobić to samo w najgorszym przypadku w O(n log n)
. Jest to tak dobre, jak rozwiązanie do sortowania, z tym, że nie zmienia kolejności elementów (zużywa więcej pamięci, chociaż tworzysz zestaw).
Innym sposobem jest skopiowanie wektora do innego wektora, posortowanie go i sprawdzenie sąsiednich elementów. Nie jestem pewien, czy jest to szybsze od ustawionego rozwiązania, ale myślę, że sortowanie dodaje mniej narzutów niż zrównoważone drzewa wyszukiwania, których używa zestaw, więc powinno być szybciej w praktyce.
Oczywiście, jeśli nie zależy Ci na zachowaniu oryginalnej kolejności elementów, posortuj początkowy wektor.
Duplikat [określanie, czy nieuporządkowana wektor ma wszystkie unikalne elementy] (http://stackoverflow.com/questions/2769174/determining-if-an-unordered-vectort-has-all-unique-elements) –
Can modyfikujesz wektor? Jeśli nie, czy masz pamięć do przydzielenia kopii? – florin