Mogę myśleć o ich sortowaniu, a następnie przejściu przez każdy element jeden po drugim, ale jest to nlogn. Czy istnieje liniowa metoda liczenia różnych elementów na liście?Jak liczyć różne wartości na liście w czasie liniowym?
Odpowiedz
Aktualizacja: - wyraźny w porównaniu z unikalnym
Jeśli szukasz „unikalne” wartości (jak na razie widać element „Jason” więcej niż raz, to nie jest ponad już wyjątkowy i nie powinny być liczone)
można to zrobić w czasie liniowym przy użyciu HashMap;)
(uogólnione/language-agnostyk pomysł jest Hash table)
Każdy wpis HashMap/stołu mieszania jest <KEY, VALUE>
pary, gdzie klucze są unikatowe (ale bez ograniczenia odpowiadających im wartości w para)
Etap 1:
iterację wszystkich elementy na liście kiedyś: o (n)
- dla każdego elementu widoczne na liście, należy sprawdzić, czy to w HashMap już O (1), amortyzowane
- Jeśli nie, dodaj go do HashMap z wartością elementu w liście jako klucz, a ile razy widziałeś tę wartość tak pod względem wartości o (1)
- Jeśli tak, zwiększamy liczbę razy widziałem ten klucz dotychczas o (1)
Krok 2:
iterację HashMap i policzyć klawisze o wartości równej dokładnie 1 (w ten sposób wyjątkowe) O (n)
Analiza:
- Czas: O (n), amortyzowane
- Przestrzeń: O (U), gdzie U to liczba odrębnych wartości.
Jeśli jednak szukasz „odrębne” wartości (jak w jeśli chcesz policzyć ile różne elementy istnieją), użyj HashSet zamiast HashMap/Hash tabela, a następnie po prostu zapytaj o rozmiar HashSet.
Możesz przystosować this extremely cool O(n)-time and O(1)-space in-place algorithm do usuwania duplikatów do zadania liczenia różnych wartości - po prostu policz liczbę wartości równą wartości wartownika w ostatnim O (n) przebiegu i odejmij od rozmiaru listy.
- 1. Sortowanie w czasie liniowym i na miejscu
- 2. Jak odwrócić wykres w czasie liniowym?
- 3. Jak liczyć różne elementy na konkretnych polach w QueryDSL
- 4. Grupa zapytań Django według i liczyć różne
- 5. Jak liczyć jak liczyć na konkretny kraj?
- 6. Jak liczyć liczbę wartości numerycznych w kolumnie
- 7. Jak liczyć wiele wartości w tablicy
- 8. jak liczyć wartości poziome w bazie danych?
- 9. Sprawdź, czy minimalne drzewo opinające zawiera krawędź w czasie liniowym?
- 10. Clusterowanie miliarda elementów (lub metod grupowania w czasie liniowym?)
- 11. Jak uzyskać unikalne wartości na liście
- 12. Jak liczyć wystąpienia każdej odrębnej wartości w kolumnie?
- 13. Zastąpić Brak wartości na liście?
- 14. Edytować wartości na liście słowników?
- 15. 2 różne żądanie php w tym samym czasie na użytkownika
- 16. Jak liczyć dzieci w drzewie
- 17. przy liczyć od wartości pary w tabeli
- 18. Jak mogę znaleźć indeks maksymalnej wartości na liście w Scali?
- 19. Jak liczyć wartości w pewnym zakresie w tablicy Numpy?
- 20. Jak pobrać różne wartości w danych podstawowych?
- 21. Jak zmieniać wartości właściwości w czasie wykonywania na wiosnę
- 22. Jak liczyć wiersze na arkusz w OpenXML
- 23. Jak wyśrodkować zawartość w układzie liniowym?
- 24. Odnajdywanie wartości indeksu najmniejszej liczby na liście?
- 25. Pobieranie wartości z elementu listy, gdy występują różne układy na liście
- 26. Python Dostęp do wartości na liście słowników
- 27. Różne sposoby publikowania wartości json na serwerze
- 28. Python - Użyj 'set', aby znaleźć różne pozycje na liście
- 29. Jak skutecznie liczyć wystąpienia wartości kolumny w SQL?
- 30. odbicie na liście i wartości drukowania
Oto jak znaleźć szereg unikalnych wartości na liście, a pytanie dotyczy znalezienia pewnej liczby różnych wartości. Aby policzyć różne wartości, użyj [HashSet] (http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html). Po prostu dodaj każdy element listy do HashSet i sprawdź jego liczność. – user1871166
Czy nie chcesz policzyć WSZYSTKICH wartości w HashMap w kroku 2, a nie tylko tych o wartości 1? Wykonanie tego w ten sposób policzy tylko te elementy, które pojawią się dokładnie raz, np. lista {PAT, PAT, STEVE, JOEL} dałaby wartość 2 (tylko STEVE i JOEL występują raz) zamiast poprawnej wartości 3 różnych nazw. – Jason
Uwaga! Istnieje tu rozbieżność interpretacyjna: zakładam, że jeśli widzisz określoną wartość 2 lub więcej razy, nie jest ona już "wyraźna"/"unikalna" - ale będę ją edytować, aby była bardziej przejrzysta. –