zoukankan      html  css  js  c++  java
  • leetcode 599. Minimum Index Sum of Two Lists

    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:

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

    没有看懂其意思,但是通过测试用例大概明白了它想干嘛!

    class Solution(object):
        def findRestaurant(self, list1, list2):
            """
            :type list1: List[str]
            :type list2: List[str]
            :rtype: List[str]
            """        
            d1 = {s:i for i,s in enumerate(list1)} 
            d2 = {s:i for i,s in enumerate(list2)}
            
            ans = []
            min_sum = float('inf')
            for s in d1:
                if s in d2:
                    sum2 = d1[s]+d2[s]
                    if sum2 < min_sum:
                        min_sum = sum2
                        ans = [s]
                    elif sum2 == min_sum:
                        ans.append(s)
            return ans        

    还可以节省一个dict。

    class Solution(object):
        def findRestaurant(self, list1, list2):
            """
            :type list1: List[str]
            :type list2: List[str]
            :rtype: List[str]
            """        
            d1 = {s:i for i,s in enumerate(list1)}         
            ans = []
            min_sum = float('inf')
            for i,s in enumerate(list2):
                if s in d1:
                    sum2 = d1[s]+i
                    if sum2 < min_sum:
                        min_sum = sum2
                        ans = [s]
                    elif sum2 == min_sum:
                        ans.append(s)
            return ans        
  • 相关阅读:
    【java基础知识】1
    【android】工程基本文件介绍
    【sqlite权威指南】笔记3 sqlite入门
    【sqlite权威指南】笔记2 sqlite介绍
    【sqlite权威指南】笔记1 概述
    【sqlite】1 start
    【操作系统】笔记8 存储器
    【操作系统】笔试7 汇编
    【操作系统】笔记6 java基本类型及运算
    【操作系统】笔记5
  • 原文地址:https://www.cnblogs.com/bonelee/p/8688852.html
Copyright © 2011-2022 走看看