1

题目大意:

给出N行M列的数字矩阵,求其中超过半数的出现次数最多的数字。

算法思路:

使用unordered_map<int,int> counts;统计每一个数字出现的次数,对于输入的每一个数字num,将counts[num]自增,按照道理来说是需要遍历counts获得出现半数最多的那个数字,但是经过测试发现,有且只有一个数字出现超过半数,所以在统计counts[num]直接判断是否已经超过半数,如果是就输出num结束程序即可。

提交结果:

image.png

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

乔梓鑫
569 声望17 粉丝

主要分享个人学习经验和心得