题目大意:
给出N行M列的数字矩阵,求其中超过半数的出现次数最多的数字。
算法思路:
使用unordered_map<int,int> counts;
统计每一个数字出现的次数,对于输入的每一个数字num,将counts[num]
自增,按照道理来说是需要遍历counts
获得出现半数最多的那个数字,但是经过测试发现,有且只有一个数字出现超过半数,所以在统计counts[num]
直接判断是否已经超过半数,如果是就输出num
结束程序即可。
提交结果:
AC代码:
#include <cstdio>
#include <unordered_map>
using namespace std;
int main(){
int N,M;
scanf("%d %d",&N,&M);
unordered_map<int,int> counts;// 统计每一个数字出现的次数
int num;
for (int i = 0; i < N; ++i) {
for (int j = 0; j < M; ++j) {
scanf("%d",&num);
++counts[num];
if(2*counts[num]>M*N){
printf("%d",num);
return 0;
}
}
}
return 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。