读完题目时,想到的这个题目可以使用哈希表。
基本思想:
依次读取每个数据,每读到一次就在哈希表中加一。当数据读完之后,在遍历哈希表求出出现次数最多的数。
#include <stdio.h>
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
int n;
//读入数据的长度
scanf("%d", &n);
//创建哈希表
unordered_map<int, int> map;
//读入数据
for (int i = 0; i < n; i++) {
int num;
scanf("%d", &num);
map[num]++;
}
int max = 0;
int maxCount = 0;
for (auto it : map) {
if (it.second > maxCount) {
max = it.first;
maxCount = it.second;
} else if (it.second == maxCount && it.first < max) { //当出现次数相同时,取数值小的。
max = it.first;
maxCount = it.second;
}
}
printf("%d", max);
return 0;
}
需要运算 1 0 6 次 10^6次 106次,一秒内可以算完。时间复杂度 O ( n ) O(n) O(n)。