Tôi có thể nghĩ đến việc phân loại chúng và sau đó đi qua từng phần tử một, nhưng điều này là không quan trọng. Có phương pháp tuyến tính nào để tính các phần tử riêng biệt trong danh sách không?Làm thế nào để đếm các giá trị khác biệt trong một danh sách trong thời gian tuyến tính?
Trả lời
Cập nhật: - khác biệt so với độc đáo
Nếu bạn đang tìm kiếm "độc đáo" giá trị (Như trong nếu bạn nhìn thấy một yếu tố "JASON" nhiều hơn một lần, hơn là không có còn độc đáo và không nên được tính)
Bạn có thể làm điều đó trong thời gian tuyến tính bằng cách sử dụng một HashMap;)
(Các tổng quát/ngôn ngữ-agnostic ý tưởng là Hash table)
Mỗi mục của một HashMap/table Hash là <KEY, VALUE>
cặp nơi các phím là duy nhất (nhưng không hạn chế đối với giá trị tương ứng của chúng trong cặp)
Bước 1:
Duyệt qua tất cả các yếu tố trong danh sách một lần: O (n)
- Đối với mỗi yếu tố nhìn thấy trong danh sách, kiểm tra để xem nếu nó là trong HashMap đã O (1), khấu hao
- Nếu không, hãy thêm nó vào HashMap với giá trị của các phần tử trong danh sách là KEY, và số lần bạn đã nhìn thấy giá trị này cho đến nay là GIÁ TRỊ O (1)
- Nếu vậy, tăng số lần bạn đã nhìn thấy KEY này cho đến nay O (1)
Bước 2:
Duyệt qua HashMap và đếm KEYS với giá trị bằng chính xác 1 (do đó duy nhất) O (n)
Phân tích:
- Runtime: O (n), khấu hao
- Không gian: O (U), trong đó U là số giá trị khác biệt.
Tuy nhiên, nếu bạn đang tìm kiếm "khác biệt" giá trị (Như trong nếu bạn muốn đếm có bao nhiêu khác nhau yếu tố có), sử dụng một HashSet thay vì một HashMap/Hash bảng, và sau đó chỉ cần truy vấn kích thước của HashSet.
Bạn có thể điều chỉnh this extremely cool O(n)-time and O(1)-space in-place algorithm để xóa các mục trùng lặp với nhiệm vụ đếm các giá trị riêng biệt - chỉ cần đếm số giá trị bằng giá trị sentinel trong thẻ O (n) cuối cùng và trừ đi từ kích thước của danh sách.
- 1. Cách tính các giá trị khác biệt trong một nút?
- 2. Danh sách trả về các giá trị trong khoảng thời gian cho một trường cụ thể
- 3. Làm cách nào để sắp xếp danh sách các giá trị thời gian của Python?
- 4. Làm thế nào để tạo danh sách bằng Python khác biệt dựa trên thuộc tính của lớp trong danh sách?
- 5. Xóa tất cả các giá trị trong một danh sách khỏi một danh sách khác?
- 6. Làm thế nào để nối một danh sách các giá trị trong sparql?
- 7. Làm cách nào để đảo ngược biểu đồ trong thời gian tuyến tính?
- 8. tính 95 phần trăm giá trị danh sách trong python
- 9. Làm thế nào nhận được tổng cho mỗi giá trị khác biệt trong một cột khác?
- 10. Làm thế nào để đếm các giá trị trong một phạm vi nhất định trong một mảng Numpy?
- 11. Android - Cách đếm thời gian trong một thời gian dài
- 12. Làm thế nào để đếm các giá trị nan trong một DataFrame gấu trúc?
- 13. Làm cách nào để tính các giá trị khác biệt trong một cột của nhóm gấu trúc theo đối tượng?
- 14. Lấy danh sách các giá trị khác nhau trong Danh sách
- 15. Làm thế nào để đếm các mục trong dấu phẩy danh sách tách MySQL
- 16. In một danh sách đơn lẻ liên kết ngược, trong không gian liên tục và thời gian tuyến tính
- 17. Cách hiệu quả nhất để tính tần suất của các giá trị trong danh sách Python?
- 18. Làm thế nào để chiều dài danh sách đếm Python
- 19. Các mục đếm Python trong giá trị dict là một danh sách
- 20. Thay thế các giá trị trong danh sách CMake
- 21. MongoDB tìm giá trị trong danh sách các danh sách
- 22. Làm thế nào để loại bỏ giá trị trùng lặp từ một danh sách trong groovy
- 23. Làm thế nào để transpose một bản đồ với giá trị danh sách trong Scala
- 24. Làm thế nào để lọc ra các giá trị sai từ danh sách trong vợt
- 25. Loại trừ mục danh sách có chứa các giá trị từ một danh sách khác
- 26. So sánh hai danh sách và trả lại giá trị khác biệt và sự khác biệt
- 27. Làm thế nào để thiết lập lại giá trị thời gian của setTimeout() trong Javascript?
- 28. Làm thế nào để có được một danh sách các cặp giá trị khóa trong một đối tượng?
- 29. Làm thế nào để bao gồm một bộ đếm thời gian trong Bash Scripting?
- 30. Làm thế nào để tạo một danh sách các số nguyên riêng biệt từ một danh sách các đối tượng?
Đây là cách tìm một số giá trị duy nhất trong danh sách và câu hỏi là tìm một số giá trị khác biệt. Để đếm các giá trị riêng biệt, hãy sử dụng [HashSet] (http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html). Chỉ cần thêm mọi phần tử của danh sách vào HashSet và kiểm tra cardinality của nó. – user1871166
Bạn sẽ không muốn tính TẤT CẢ các giá trị trong HashMap ở bước 2, thay vì chỉ những giá trị có giá trị 1? Làm theo cách này sẽ chỉ đếm các phần tử xuất hiện chính xác một lần, ví dụ: danh sách {PAT, PAT, STEVE, JOEL} sẽ dẫn đến giá trị là 2 (chỉ STEVE và JOEL xảy ra một lần) thay vì giá trị đúng của 3 tên riêng biệt. – Jason
Lưu ý! Có một sự khác biệt về giải thích ở đây: Giả định của tôi là nếu bạn thấy một giá trị cụ thể 2 hoặc nhiều lần, nó không còn "khác biệt"/"duy nhất" - nhưng tôi sẽ chỉnh sửa nó rõ ràng hơn. –