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.
想法如下
- 先用一個 HashMap 將 list 1 的值都存起來,key 是 String 然後 value 是 index
- 歷遍 list2,檢查該 String 在不在 map 裡面,如果有,計算目前的 index sum。若是 index sum 比目前的index sum的更小,清空之前的記錄的答案,更新最小值,重新紀錄答案 ; 如果和目前的index sum 一樣大,那就把該 string 放到答案中
Java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public String[] findRestaurant(String[] list1, String[] list2) { | |
HashMap<String, Integer> map = new HashMap<>(); | |
for(int i = 0; i < list1.length; i++) { | |
map.put(list1[i], i); | |
} | |
ArrayList<String> ans = new ArrayList<>(); | |
int minSum = Integer.MAX_VALUE; | |
int tmpSum; | |
for(int i = 0; i < list2.length && i <= minSum; i++) { | |
if(map.containsKey(list2[i])) { | |
tmpSum = i + map.get(list2[i]); | |
if(tmpSum < minSum) { | |
minSum = tmpSum; | |
ans.clear(); | |
ans.add(list2[i]); | |
} | |
else if(tmpSum == minSum) { | |
ans.add(list2[i]); | |
} | |
} | |
} | |
return ans.toArray(new String[0]); | |
} | |
} |
沒有留言:
張貼留言