算法设计与分析众数问题分治法C++代码
时间: 2024-05-07 11:22:43 浏览: 125
众数问题可以使用分治法来解决。下面是使用C++实现的分治法众数算法代码:
```cpp
int majority(vector<int>& nums, int left, int right) {
if (left == right) {
return nums[left];
}
int mid = left + (right - left) / 2;
int leftMajority = majority(nums, left, mid);
int rightMajority = majority(nums, mid + 1, right);
if (leftMajority == rightMajority) {
return leftMajority;
}
int leftCount = count(nums.begin() + left, nums.begin() + right + 1, leftMajority);
int rightCount = count(nums.begin() + left, nums.begin() + right + 1, rightMajority);
return leftCount > rightCount ? leftMajority : rightMajority;
}
int majorityElement(vector<int>& nums) {
return majority(nums, 0, nums.size() - 1);
}
```
这里使用递归实现分治法,将数组不断分成左右两半。当只有一个元素时,返回该元素。
在每一次递归中,我们找到左半部分的众数和右半部分的众数。如果它们相等,则返回该众数。否则,我们计算左半部分和右半部分中每个众数的出现次数,返回出现次数较多的那个众数。
最终,我们可以通过调用 `majorityElement` 函数来得到整个数组的众数。
阅读全文