📅  最后修改于: 2023-12-03 15:27:11.264000             🧑  作者: Mango
这个程序是用于查询数组元素出现次数在给定频率范围内的 C++ 程序。它使用了一个哈希表来记录每个元素的出现次数,并遍历哈希表来确定符合条件的元素。
以下是完整的程序实现。我们首先包含必要的标头文件,并定义一个典型的哈希表:
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
unordered_map<int, int> freq;
接下来,我们编写一个函数来计算数组中每个元素的出现次数。该函数使用 freq
哈希表来记录每个元素的频率:
void calc_freq(vector<int>& arr) {
for (int i = 0; i < arr.size(); ++i) {
freq[arr[i]]++;
}
}
现在,我们可以编写一个函数来获取出现次数在给定范围内的元素。该函数将遍历 freq
哈希表,并将符合条件的元素添加到结果向量中:
vector<int> get_freq_range(int freq_min, int freq_max) {
vector<int> res;
for (auto it = freq.begin(); it != freq.end(); ++it) {
if (it->second >= freq_min && it->second <= freq_max) {
res.push_back(it->first);
}
}
return res;
}
注意,我们使用了 C++11 中的新范围循环语法来遍历 freq
哈希表。这个语法也可以使用迭代器进行遍历,但是它更加简洁和易读。
最后,我们在 main
函数中使用这些函数来计算数组中出现的元素的出现次数,并返回出现次数为 2 或 3 次的元素:
int main() {
vector<int> arr = {1, 2, 3, 3, 4, 4, 4, 5, 5};
calc_freq(arr);
vector<int> res = get_freq_range(2, 3);
cout << "Elements with frequency 2 to 3: ";
for (int i = 0; i < res.size(); ++i) {
cout << res[i] << " ";
}
cout << endl;
return 0;
}
这个程序演示了如何使用哈希表来计算数组中每个元素的出现次数,并在其中执行一个查询。虽然这个程序看起来非常简单,但它可以用作更大和更复杂的程序中实现频率查询的构建块。