Day1 -- Minimum Index Sum of Two Lists
阿新 • • 發佈:2018-11-14
From: https://leetcode.com/
mode: random pick
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.
My solution:
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 # Time : 2018/11/14
4
5
6 class Solution:
7
8 def _fistQuery(self, list1, list2):
9 if len(list1) == 1:
10 return list1
11 if len(list2) == 1:
12 return list2 13 14 def findRestaurant(self, list1, list2): 15 """ 16 :type list1: List[str] 17 :type list2: List[str] 18 :rtype: List[str] 19 """ 20 fist_req = self._fistQuery(list1, list2) 21 if fist_req: 22 return fist_req 23 min_index = -1 24 temp_req = [] 25 for index1, res in enumerate(list1): 26 if res in list2: 27 index2 = list2.index(res) 28 index_sum = index1+index2 29 if min_index == -1: 30 min_index = index_sum 31 temp_req.append(res) 32 else: 33 if min_index == index_sum: 34 temp_req.append(res) 35 elif min_index > index1 + index2: 36 temp_req = [res, ] 37 return temp_req 38 39 def findRestaurant2(self, list1, list2): 40 """ 41 :type list1: List[str] 42 :type list2: List[str] 43 :rtype: List[str] 44 """ 45 fist_req = self._fistQuery(list1, list2) 46 if fist_req: 47 return fist_req 48 req_list = [] 49 max_sum_index = len(list1) + len(list2) - 1 50 for i in range(max_sum_index): 51 j = 0 52 while i - j >= 0: 53 if list1[j] == list2[i-j]: 54 req_list.append(list1[j]) 55 j += 1 56 if req_list: 57 return req_list 58 59 60 if __name__ == '__main__': 61 s = Solution() 62 print s.findRestaurant2(["Shogun", "Tapioca Express", "Burger King", "KFC"], 63 ["KFC", "Shogun", "Burger King"])
總結:
這道題的難度是Easy,但是從中也是可以鍛鍊自己的思維能力。findRestaurant為第一種也是最容易想到的迴圈方式,findRestaurant2是根據結果的index sum來反向找element。另:經過大哲提醒set方式也是一種便捷思路