众数问题
2017-11-13 23:05 沈橙Anei 阅读(159) 评论(0) 编辑 收藏 举报众数问题
#include <iostream>
#include <vector>
std::vector<char> members;
char max_c;//众数
int max_i = 0;//重数
void getMax(std::vector<char>::iterator& start, std::vector<char>::iterator& end) {
int n = (end - start)/2;
std::vector<char>::iterator mid = start + n;
std::vector<char>::iterator l = start, r = end;
while(*l != *mid && *l != *end){
l++;
}
while(*r != *mid && *r != *start){
r--;
}
start = l;
end = r;
if (end – start + 1 > max_i) {
max_i = end - start + 1;
max_c = *mid;
}
}
void fun(std::vector<char>::iterator flag, int n){
std::vector<char>::iterator start = flag;
std::vector<char>::iterator end = flag + n;
getMax(start, end);
int l_count = start - flag;
int r_count = n - (end - flag);
if (l_count > max_i){
fun(flag, l_count);
}
if (r_count > max_i) {
fun(end, r_count);
}
}
int main() {
int n;
std::cout << "input the number of member" << std::endl;
std::cin >> n;
for (int i = 0; i < n; i++) {
char get;
std::cin >> get;
members.push_back(get);
}
fun(members.begin(), members.size());
std::cout << max_c << ":" << max_i << std::endl;
return 0;
}