随机化算法设计 实验内容:主元素问题 设T[1:n]是一个含有n个元素的数组。当|{i|T[i]=x}|>n/2时,称元素x是数组T的主元素。 要求:随机输入一个具有n个元素的数组。要求输出数组的主元素。C++实现
时间: 2024-03-19 13:46:20 浏览: 94
好的,让我为您提供一个 C++ 实现的随机化算法解决主元素问题。
算法思路与之前提供的 Python 代码类似,依然使用摩尔投票算法。具体实现如下:
```c++
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
int findMajorityElement(vector<int>& nums) {
int candidate = 0, count = 0;
for (int num : nums) {
if (count == 0) {
candidate = num;
count = 1;
}
else if (num == candidate) {
count++;
}
else {
count--;
}
}
int cnt = 0;
for (int num : nums) {
if (num == candidate) {
cnt++;
}
}
return cnt > nums.size() / 2 ? candidate : -1;
}
int main() {
srand(time(NULL));
int n = 10;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
// 生成随机数
nums[i] = rand() % 10;
cout << nums[i] << " ";
}
cout << endl;
int majorityElement = findMajorityElement(nums);
if (majorityElement != -1) {
cout << "The majority element is " << majorityElement << endl;
}
else {
cout << "There is no majority element" << endl;
}
return 0;
}
```
在这段代码中,我们使用了 srand 和 time 函数生成了随机种子,然后使用 rand 函数生成了随机数填充了 nums 数组。最后调用 findMajorityElement 函数找到主元素,并输出结果。
希望这个代码能够帮助到您,如果有任何问题请随时问我哦!
阅读全文