分治思想求众数_虽然效率不好_但是便于学习分治的思想方法
//解释:
/*采用分治法的思想在这道题中的体现就是对于一个区间去分成两份,然后
count函数的作用是对于一个区间段的函数去进行统计某个数的个数
find函数的作用是负责把区间分开,然后对比两个区间中的出现次数更多的数,把这个数作为这两个区间合成的区间的众数。对比的依据就是count函数来对比的。
FIND函数就是对这个find一个汇总,多考虑一个特殊的空数组的情况。*/
#include <iostream> #include <vector> using namespace std; typedef vector<int>ve; ve vv = {1, 2, 2, 2, 3, 5}; int count(int l, int r, int x) { int ans = 0; for (int i = l; i <= r; i++) if (vv[i] == x) ans++; return ans; } int find(int l, int r) { if (l == r) return vv[l]; int mid = l + r >> 1; int left_num = find(l, mid); int right_num = find(mid + 1, r); int ans_left = count(l, r, left_num); int ans_right = count(l, r, right_num); if (ans_left > ans_right) return left_num; else return right_num; } int FIND(int n) { if (vv.size() == 0) return -1; return find(0, n - 1); } int main() { cout << FIND(6); }