0
点赞
收藏
分享

微信扫一扫

「 每日一练,快乐水题 」599. 两个列表的最小索引总和


文章目录

  • ​​🔴力扣原题:​​
  • ​​🟠题目简述:​​
  • ​​🟡解题思路:​​
  • ​​🟢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;
}
};

🔵结果展示:

「 每日一练,快乐水题 」599. 两个列表的最小索引总和_i++


举报

相关推荐

0 条评论