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

Posted 谁吃薄荷糖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「 每日一练,快乐水题 」599. 两个列表的最小索引总和相关的知识,希望对你有一定的参考价值。

🔴力扣原题:

力扣链接: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. 两个列表的最小索引总和的主要内容,如果未能解决你的问题,请参考以下文章

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

「 每日一练,快乐水题 」908. 最小差值 I

「 每日一练,快乐水题 」744. 寻找比目标字母大的最小字母

「 每日一练,快乐水题 」744. 寻找比目标字母大的最小字母

「 每日一练,快乐水题 」744. 寻找比目标字母大的最小字母

「 每日一练,快乐水题 」908. 最小差值 I