「 每日一练,快乐水题 」599. 两个列表的最小索引总和
Posted 谁吃薄荷糖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「 每日一练,快乐水题 」599. 两个列表的最小索引总和相关的知识,希望对你有一定的参考价值。
🔴力扣原题:
🟠题目简述:
假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。
你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。
🟡解题思路:
1.首先构建2个map:1.用于两个统计餐厅出现的字数2.用于计算索引和;
2.根据上述两个map得出相同的餐厅的索引和,插入map;
3.遍历得出索引和最小的即可。
🟢C++代码:
class Solution
public:
vector<string> findRestaurant(vector<string>& list1, vector<string>& list2)
int n1 = list1.size();
int n2 = list2.size();
unordered_map<string, int> umap1;
unordered_map<string, int> umap2;
for(int i = 0;i < n1; i++)
++umap1[list1[i]];
umap2[list1[i]] += i;
for(int j = 0;j < n2; j++)
++umap1[list2[j]];
umap2[list2[j]] += j;
unordered_map<string,int> umap3;
for(auto it = umap1.begin(); it != umap1.end(); it++)
if(it->second > 1)
auto it1 = umap2.find(it->first);
umap3[it1->first] = it1->second;
vector<string> ret;
int nMin = n1 + n2;
for(auto it = umap3.begin(); it != umap3.end(); it++)
cout << it->first << " " << it->second << endl;
nMin = min(nMin, it->second);
for(auto it = umap3.begin(); it != umap3.end(); it++)
if(nMin == it->second)
ret.push_back(it->first);
return ret;
;
🔵结果展示:
以上是关于「 每日一练,快乐水题 」599. 两个列表的最小索引总和的主要内容,如果未能解决你的问题,请参考以下文章
「 每日一练,快乐水题 」744. 寻找比目标字母大的最小字母
「 每日一练,快乐水题 」744. 寻找比目标字母大的最小字母