LeetCode599. Minimum Index Sum of Two Lists [C++]

Suppose Andy and Doris want to choose a restaurant for dinner, and they both have a list of favorite restaurants represented by strings.

You need to help them find out their common interest with the least list index sum. If there is a choice tie between answers, output all of them with no order requirement. You could assume there always exists an answer.

Example 1:

Input:
["Shogun", "Tapioca Express", "Burger King", "KFC"]
["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun"]
Output: ["Shogun"]
Explanation: The only restaurant they both like is "Shogun".

Problem-solving ideas:

1, create a map, with its name for the key, and the value of the index. To determine which is twice the value minus sum.

2, find the minimum value of the map.

3, to find the minimum value of the corresponding key (there may be more than one).

class Solution {
public:
    vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
        map<string,int> m;
        int sum=list1.size()+list2.size();
        for(int i=0;i<list1.size();i++)
        {
            m[list1[i]]=m[list1[i]]+i-sum;
        }
        for(int i=0;i<list2.size();i++)
        {
            m[list2[i]]=m[list2[i]]+i-sum;
        }
        int min=0;
        for(map<string,int>::iterator it=m.begin();it!=m.end();it++)
        {
            if(it->second<min)
                min=it->second;
            //cout<<it->first<<" "<<it->second<<endl;
        }
        vector<string> ans;
        for(map<string,int>::iterator it=m.begin();it!=m.end();it++)
        {
            if(it->second==min)
            {
                ans.push_back(it->first);
            }
        }
        return ans;
    }
};

 

Guess you like

Origin blog.csdn.net/ueh286/article/details/91891624