题目粗心:

给出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;}