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. 统计按位或能得到最大值的子集数目

599. 两个列表的最小索引总和C++

599. 两个列表的最小索引总和C++

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

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