关于算法-数据结构:PAT甲级1054-The-Dominant-Color

37次阅读

共计 497 个字符,预计需要花费 2 分钟才能阅读完成。

题目粗心:

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

正文完
 0