题意:给定N个数,选出其中数量大于(N+1)/2的数
两种方法实现,第一种方法排序,选择中间的那个数。第二种方法搜一遍。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
int a[1024000];
int main()
{
int n;
while(cin >> n){
for(int i = 0; i < n; ++i) cin >> a[i];
sort(a, a + n);
cout << a[(n-1)/2] << endl;
}
return 0;
}#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
int main()
{
int n;
while(cin >> n){
int maxx = 0, cnt = 0;
for(int i = 0; i < n; ++i){
int t; cin >> t;
if(!cnt){
maxx = t;
++cnt;
}else{
if(t == maxx) ++cnt;
else --cnt;
}
}
cout << maxx << endl;
}
return 0;
}
本文介绍两种寻找众数的方法:一种是对数组进行排序后选择中间元素;另一种是通过遍历数组来找出可能的众数,该方法基于Boyer-Moore投票算法原理。

被折叠的 条评论
为什么被折叠?



