算法设计与分析实验用c++解决问题:给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。 输入:S={1,2,2,2,3,5} 输出:所重集S的众数是2,其重数为3.
时间: 2024-11-24 16:41:53 浏览: 27
算法设计与分析实验中,我们可以使用C++解决这个问题。一种常见的方法是使用哈希表(unordered_map)来统计每个元素出现的次数,然后遍历这个映射找出出现次数最多的元素,即为众数。
以下是简单的C++代码实现:
```cpp
#include <iostream>
#include <unordered_map>
int findMajorityElement(std::vector<int>& nums) {
std::unordered_map<int, int> count;
for (const auto& num : nums) {
count[num]++;
if (count[num] > nums.size() / 2) {
return num;
}
}
// 如果没有唯一的多数元素,返回任意一个非空的计数
for (auto it = count.begin(); it != count.end(); ++it) {
if (it->second > nums.size() / 2) {
return it->first;
}
}
throw std::runtime_error("No majority element found");
}
int main() {
std::vector<int> S = {1, 2, 2, 2, 3, 5};
int result = findMajorityElement(S);
std::cout << "The mode of the set is: " << result << ", with a frequency of: " << count[result] << std::endl;
return 0;
}
```
在这个代码中,`findMajorityElement`函数首先通过遍历输入数组更新每个元素的计数。当遇到某个元素的计数超过总元素的一半时,它就是众数。如果没有找到这样的元素,则表示不存在众数,并抛出异常。
阅读全文