算法
最终解是要求出某一部电影语音听懂的人最多,如多有多部电影能听懂人数相同,就比较能看懂字幕的人。这样的比较可以转化为对pair<int, int>的比较。
1.在输入每个人能听懂的语言时,对每种语言出现的数量进行统计,weight[语言] = 语言出现的次数。 使用unordered_map,时间复杂度O(n)。
2.输入b[i], c[i], 生成一个pair<int, int> p(weight[b[i]], weight[c[i]]) 第i部电影的权重。对每一个i进行扫描,找到最大的p,所对应的i就是答案。
时间复杂度
O(n)
C++ 代码
#include<iostream>
#include<cstdio>
#include<map>
#include<unordered_map>
#include<unordered_set>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int m, n, t;
scanf("%d", &n);
unordered_map<int, int> weight;
for(int i = 0; i < n; ++i) {
scanf("%d", &t);
++weight[t];
}
scanf("%d", &m);
vector<int> b, c;
for(int i = 0; i < m; ++i) {
scanf("%d", &t);
b.push_back(t);
}
for(int i = 0; i < m; ++i) {
scanf("%d", &t);
c.push_back(t);
}
pair<int, int> max_p;
int max_m = -1;
for(int i = 0; i < m; ++i) {
pair<int, int> p(weight[b[i]],weight[c[i]]);
if(-1 == max_m || max_p < p) {
max_m = i + 1;
max_p = p;
}
}
printf("%d\n", max_m);
}