分治法求众数,用spilt函数和c++写
时间: 2024-02-19 10:58:08 浏览: 88
分治法求众数的思路是将原问题分解为若干个子问题,然后将子问题的结果合并起来得到原问题的解。具体实现中,可以通过split函数将原数组分成两部分,然后分别对两部分递归调用求众数的函数,最后将两部分的众数合并,得到整个数组的众数。
以下是用C++实现分治法求众数的代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int majorityElement(vector<int>& nums) {
if (nums.size() == 1) return nums[0];
// 分治
vector<int> left(nums.begin(), nums.begin() + nums.size() / 2);
vector<int> right(nums.begin() + nums.size() / 2, nums.end());
int left_majority = majorityElement(left);
int right_majority = majorityElement(right);
// 合并
int count_left = 0, count_right = 0;
for (int num : nums) {
if (num == left_majority) count_left++;
else if (num == right_majority) count_right++;
}
if (count_left > nums.size() / 2) return left_majority;
else if (count_right > nums.size() / 2) return right_majority;
else return -1; // 不存在众数的情况
}
int main() {
vector<int> nums = {1, 2, 3, 2, 2, 2, 5, 4, 2};
cout << majorityElement(nums) << endl; // 输出 2
return 0;
}
```
其中split函数并没有用到,因为C++标准库已经提供了vector容器的切片操作。
阅读全文