LeetCode 599. 两个列表的最小索引总和
Posted Blocking The Sky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 599. 两个列表的最小索引总和相关的知识,希望对你有一定的参考价值。
题目描述
假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。
你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设总是存在一个答案。
示例:
输入:
["Shogun", "Tapioca Express", "Burger King", "KFC"]
["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun"]
输出: ["Shogun"]
解释: 他们唯一共同喜爱的餐厅是“Shogun”。
思路
首先把list1和索引存到map1中,然后在遍历list2通过哈希查询两个共同喜爱的餐厅,并将名字和索引之和存储到map2中,同时记录索引之和的最小值,最后遍历map2查询索引之和等于最小值的所有结果,返回即可。
代码
class Solution {
public:
vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
map<string,int> map1;
map<string,int> map2;
int minn=INT_MAX;
vector<string> result;
for(int i=0;i<list1.size();i++){
map1.insert(map<string,int>::value_type(list1[i],i));
}
for(int i=0;i<list2.size();i++){
auto it=map1.find(list2[i]);
if(it!=map1.end()){
map2.insert(map<string,int>::value_type(list2[i],i+it->second));
if(minn>(i+it->second))
minn=i+it->second;
}
}
for(map<string,int>::iterator i=map2.begin();i!=map2.end();i++){
if(i->second==minn){
result.push_back(i->first);
}
}
return result;
}
};
以上是关于LeetCode 599. 两个列表的最小索引总和的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 599 两个列表的最小索引总和[map] HERODING的LeetCode之路
LeetCode 393. UTF-8 编码验证 / 599. 两个列表的最小索引总和 / 2044. 统计按位或能得到最大值的子集数目