题目地址:
https://www.acwing.com/problem/content/description/1542/
给定一个分辨率为 M × N M×N M×N的屏幕,每个像素都有一个颜色,如果超过一半的像素都显示同一种颜色,则这个颜色就称之为主导颜色。现在,请你确定屏幕的主导颜色。
输入格式:
第一行包含两个整数
M
M
M和
N
N
N。接下来
N
N
N行,每行包含
M
M
M个数字,每个数字表示一种颜色。
输出格式:
输出一个整数,表示主导颜色的编号。
数据范围:
1
≤
M
≤
800
1≤M≤800
1≤M≤800
1
≤
N
≤
600
1≤N≤600
1≤N≤600
颜色编号取值在
[
0
,
224
)
[0,224)
[0,224)范围内,数据保证主导颜色一定存在。
可以用个哈希表计数。代码如下:
#include <iostream>
#include <unordered_map>
using namespace std;
int n, m;
unordered_map<int, int> mp;
int main() {
cin >> n >> m;
int res = 0;
for (int i = 1; i <= m * n; i++) {
int a;
cin >> a;
mp[a]++;
if (mp[a] > n * m / 2) {
res = a;
break;
}
}
cout << res << endl;
return 0;
}
时空复杂度 O ( m n ) O(mn) O(mn)。