599. Minimum Index Sum of Two Listspython(python+cpp)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21275321/article/details/83181233

题目:

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". 

Example 2:

Input:
 ["Shogun", "Tapioca Express","Burger King", "KFC"] 
 ["KFC", "Shogun", "Burger King"]
Output:
["Shogun"] 
Explanation: The restaurant they both like and have the least index sum is 
"Shogun" with index sum 1 (0+1). 

Note:
The length of both lists will be in the range of [1, 1000].
The length of strings in both lists will be in the range of [1, 30].
The index is starting from 0 to the list length minus 1. No duplicates in both lists.

解释:
速度超慢的python代码:

class Solution(object):
    def findRestaurant(self, list1, list2):
        """
        :type list1: List[str]
        :type list2: List[str]
        :rtype: List[str]
        """
        both=[x for x in list1 if x in list2]
        min_index=len(list1)+len(list2)
        result=[]
        for b in both:
            sum_index=list1.index(b)+list2.index(b)
            min_index=min(min_index,sum_index)
            if min_index==sum_index:
                result.append(b)
        return result 

应该用个dict(),速度和会更快,代码:

class Solution:
    def findRestaurant(self, list1, list2):
        """
        :type list1: List[str]
        :type list2: List[str]
        :rtype: List[str]
        """
        _dict={}
        for i,v in enumerate(list1):
            _dict[v]=i
        min_indexSum=float('inf')
        result=[]
        for i,v in enumerate(list2):
            if v in _dict:
                if i+_dict[v]<min_indexSum:
                    min_indexSum=i+_dict[v]
                    result=[v]
                elif i+_dict[v]==min_indexSum:
                    result.append(v)
        return result

c++代码:

class Solution {
public:
    vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
        map<string,int>_map;
        for (int i=0;i<list1.size();i++)
        {
            _map[list1[i]]=i;
        }
        int minIndexSum=INT_MAX;
        vector<string> result;
        for (int i=0;i<list2.size();i++)
        {
            string word=list2[i];
            if (_map.count(word))
            {
                if(i+_map[word]<minIndexSum)
                {
                    minIndexSum=i+_map[word];
                    result={word};
                }
                else if(i+_map[word]==minIndexSum)
                    result.push_back(word);
            }
        }
        return result;
    }
};

总结:
对于索引的题目,如果索引是经常需要得到额值,有时候用一个dict先存起来比每次都用index()遍历要快很多。

猜你喜欢

转载自blog.csdn.net/qq_21275321/article/details/83181233
今日推荐