-2
A
回答
2
是的,兩個任務都可以同時使用哈希表和BST,並且需要線性空間。
散列表和二叉搜索樹都可以實現映射接口,您可以在其中快速查找關鍵字並將其鏈接到值。
您可以使用此地圖界面來實現直方圖,該直方圖將從您的鍵映射到整數。
您迭代數組,併爲每個元素在地圖中查找它(作爲鍵)。如果該鍵存在,則獲取該值並將其增加1。
否則,插入這個新元素的地圖值1
當做到這一點,你有一個地圖滿足要求1.
爲了滿足第二個要求,只需重複地圖,找到相關的關鍵最高的價值,並返回它。
這是在需要線性額外空間的情況下完成的,並且在地圖基於散列表的情況下在O(n)
中完成,而基於BST的O(nlogn)
完成。 (對於BST,所有平均情況下,使用自平衡BST時間複雜度可以是O(nlogn)
最差情況)。
C++ 11與哈希映射實現地圖界面
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
int array[] = {1,9,9,7,5,4,1,2,0,1,0};
std::unordered_map<int,int> histogram;
for (int x : array) {
auto in_map = histogram.find(x);
if (in_map == histogram.end()) {
histogram[x] = 1;
} else {
++(in_map->second);
}
}
int most_occurances_element = -1;
int most_occurances = -1;
for (const auto& kv : histogram) {
if (kv.second > most_occurances) {
most_occurances_element = kv.first;
most_occurances = kv.second;
}
}
std::cout << "Most frequent element " << most_occurances_element << " with "
<< most_occurances << " occurances.";
return 0;
}
注意,此答案是指整數(或其他類型的可枚舉)作爲元素的代碼。對於浮點而言,根據各種因素(「相等」的定義,元素的來源等等),答案可能完全不同。)
+0
是的,謝謝,這是一種我正在尋找的解釋。 – Garrick
相關問題
- 1. 如何使用java計算哈希表中存在的單詞的頻率
- 2. 計算哈希映射中元素的頻率
- 3. 計算視頻文件的MD5(哈希)
- 4. CRC16哈希函數,用於計算來自兩個輸入的哈希值
- 5. 計算頻率
- 6. 如何利用哈希表來保存文字和使用頻率?
- 7. 計算頻率
- 8. 使用IBuffer來計算UWP文件的哈希值
- 9. Java計算MD5哈希
- 10. 計算字符串存儲在嵌套哈希映射中的頻率
- 11. 使用C++將哈希表複製到另一個哈希表
- 12. C#中的哈希計算
- 13. SHA256哈希計算在C++
- 14. C#NTLM哈希計算器
- 15. 紅寶石計算哈希
- 16. Python3計算洪流哈希
- 17. 計算BIOS的哈希值
- 18. hashCode()方法使用類來計算哈希碼?
- 19. 查詢來計算術語頻率*逆文檔頻率
- 20. 如何計算哈希數組中特定鍵的值的頻率?
- 21. 使用R計算元音的頻率
- 22. 使用indsname計算變量頻率
- 23. 使用Python計算數字頻率
- 24. 使用函數計算字符(頻率)
- 25. 計算哈希表中使用的數據桶的數量
- 26. 計算SHA1哈希算法Powershell V2.0
- 27. PHP哈希概率
- 28. 哈希表鍵語法來引用嵌入哈希表元素
- 29. 哈希表來LWUIT表
- 30. 計算部分流的MD5哈希值
這種氣味就像作業一樣。 – akappa
它的自制。 – Garrick
元素是什麼,它們是如何生成的?例如,整數的行爲與浮點數不同。 – amit