文章
84
粉丝
408
获赞
33
访问
877.7k
看到这题,首先想到的是,利用数组存所有可能的数字,数组下标对应数字,元素值对应其出现的次数。但题目中|input_number| <= 2000000,所以这样做带来的空间开销太大了。
于是,换了一种思路,用数组存下所有的数,然后进行升序排列,记录下每个元素出现的次数,并不断更新模式最大的数字,这样求出来的便是数值最小、模式最多的数字。
#include<iostream>
#include<algorithm>
using namespace std;
int cmp(const void* a, const void* b)
{
return *(int*)a - *(int*)b;
}
int main()
{
int N;
cin >> N;
int* num = new int[N];
for (int i = 0; i < N; i++) {
cin >> num[i];
}
qsort(num, N, sizeof(num[0]), cmp);
int ans = num[0], maxc = 1;//记录次数最多的数字和模式
int tmp = num[0], count = 1;//记录当前数字及其模式
for (int i = 1; i < N; i++) {
if (num[i] == tmp) {
count++;
}
else {
if (count > maxc) {//更新最多的数字及其模式
ans = tmp;
maxc = count;
}
tmp = num[i];
count = 1;
}
}
cout << ans << endl;
return 0;
}
登录后发布评论
暂无评论,来抢沙发