我可以考慮對它們進行排序,然後逐個遍歷每個元素,但這是nlogn。是否有一個線性方法來計算列表中的不同元素?如何在線性時間內對列表中的不同值進行計數?
6
A
回答
7
更新: - 獨特與唯一
如果您正在尋找「獨一無二」值(如,如果你看到一個元素「JASON」不止一次,是不是比沒有再獨特,不應該計算在內)
您可以通過做線性時間HashMap;)
(廣義/語言無關的想法是Hash table)
一個HashMap /哈希表的每個條目是<KEY, VALUE>
對,其中密鑰是唯一的(但在這對他們的相應的值沒有限制)
步驟1:
迭代通過所有列表中的元素一次:爲O(n)
- 對於列表中看到的每一個元素,檢查它是否在HashMap中已經O(1),攤銷
- 如果不是,將其添加到與列表中作爲關鍵元素的值,數量HashMap的時候,你已經看到,只要價值這個值O(1)
- 如果是的話,增加的次數,你已經看到了這個KEY到目前爲止O(1)
第二步:
迭代通過HashMap和計數與VALUE等於正好1(因而唯一的)鍵爲O(n)
分析:
- 運行時:爲O(n),攤銷
- 空間:O(U),其中U是不同值的數量。
但是,如果你正在尋找「獨特」值(好像要算多少不同元素有中),使用HashSet,而不是一個HashMap /哈希表,然後簡單地查詢HashSet的大小。
0
您可以刪除重複計數到不同值的任務適應this extremely cool O(n)-time and O(1)-space in-place algorithm - 只需數等於最後的澳哨兵值值的數量(n)的通過,並減去從列表的大小。
0
相關問題
- 1. jQuery如何通過不同的列值對錶中的行數進行計數
- 2. 如何在VIEW中對列值進行不同的計算?
- 3. 如何在出現相同值時對不同值的數量進行計數?
- 4. 如何在按熊貓進行分組的同時對列組合中的不同值進行計數?
- 5. 在線性時間對[log n]個不同的值進行排序
- 6. 如何在線性時間內進行穩定的二進制值排序?
- 7. 通過時間戳在列表內對列表進行合併
- 8. 如何按時間和相似性對列表進行排序?
- 9. 使用表中相同的值對行進行計數
- 10. 對不同列的行進行計數行有多列
- 11. 使用Android中的SQLite數據庫表對同一個表中的兩個不同的列值進行計數
- 12. 對不同表格中的不同值進行計數,其中列通常用於分隔表格
- 13. 在分段tableview中對行進行線性計數
- 14. 如何計算不同時間段數據庫中的行數?
- 15. 如何計算R數據中不同列的線性組合。表
- 16. 如何在不同的列在同一個表中的值進行比較
- 17. 用Aparapi對向量中的不同值進行計數
- 18. 通過特定列對以前時間範圍內的行進行計數
- 19. 如何使用scala對列表中的元素進行計數?
- 20. 如何根據django中的計數對列表進行排序?
- 21. 對所有表列中的唯一值進行計數
- 22. 使用R對時間序列中的缺失值進行計數
- 23. SQL Server:對來自兩個不同列的對進行計數
- 24. Excel - 根據單元格值對不同列表進行動態計數
- 25. 如何以線性時間訪問列表中的列表並創建不確定數量的對象
- 26. 如何使用java中的不同屬性對列表進行排序
- 27. 如何在一段時間內獲取不同值的計數Impala/SQL?
- 28. 如何在列表完成計數後操作列表進行倒計時?
- 29. 如何計算,並在同一時間列表中的方案
- 30. 對不同列數的表進行排序的數據表
這是如何在列表中找到多個唯一值,並且問題是關於找到許多不同的值。要計算不同的值,請使用[HashSet](http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html)。只需將列表中的每個元素添加到HashSet並檢查其基數。 – user1871166
難道你不想在步驟2中計算HashMap中的所有值,而不是隻計算值爲1的那些值?這樣做只會計算出現一次的元素,例如。列表{PAT,PAT,STEVE,JOEL}將導致值2(僅STEVE和JOEL出現一次),而不是3個不同名稱的正確值。 – Jason
注意!這裏存在解釋差異:我的假設是,如果您看到特定值2次或更多次,則它不再是「獨特」/「獨特」 - 但我會將其編輯得更加清晰。 –