hash表即可:
class Solution {
public:
vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
vector<string> ans;
unordered_map<string,int> table;
for(int i=0;i<list1.size();i++)
{
if(table.find(list1[i])==table.end())
table[list1[i]]=i;
} //add every element into the hash table
int min_des=INT_MAX;
for(int i=0;i<list2.size();i++)
{
if(table.find(list2[i])!=table.end())
{
table[list2[i]]+=i;
min_des=min(min_des,table[list2[i]]);
}
}
for(int i=0;i<list2.size();i++)
{
if(table.find(list2[i])!=table.end())
{
if(table[list2[i]]==min_des)
ans.push_back(list2[i]);
}
}
return ans;
}
int min(int a,int b)
{
return a<b?a:b;
}
};
本文介绍了一种使用哈希表解决两个餐厅列表交集问题的方法。通过将第一个列表中的元素存入哈希表,再遍历第二个列表,计算两列表中共同餐厅的索引之和,找出最小和对应的餐厅名称。

被折叠的 条评论
为什么被折叠?



