文章目录
- 🔴力扣原题:
- 🟠题目简述:
- 🟡解题思路:
- 🟢C++代码:
- 🔵结果展示:
🔴力扣原题:
力扣链接: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;
}
};
🔵结果展示: