问题描述
有N个整数,N为奇数,找出至少出现\(\frac {(N+1)}{2}\)次的数。
分析
采用的是暴力统计,排序,取位置,对应到计数数组的下标来递增,熟练了lower_bound的使用。
代码
// 离散化的思路是可以一次做出来,但是放到动态规划专题
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int N;
const int MAXN = 1000010;
int num[MAXN];
int cnt[MAXN];
int main() {
while (scanf("%d", &N) == 1) {
for (int i = 1; i <= N; i++) {
scanf("%d", &num[i]);
cnt[i] = 0;
}
sort(num + 1, num + 1 + N);
for (int i = 1; i <= N; i++) {
int order = lower_bound(num + 1, num + 1 + N, num[i]) - num;
cnt[order]++;
}
int which = 0;
for (int i = 1; i <= N; i++) {
if (cnt[i] >= (N + 1) / 2) {
which = i;
break;
}
}
printf("%d\n", num[which]);
}
return 0;
}