難度:簡單
假設andy和doris想在晚餐時選擇一家餐廳,並且他們都有乙個表示最喜愛餐廳的列表,每個餐廳的名字用字串表示。
你需要幫助他們用最少的索引和找出他們共同喜愛的餐廳。 如果答案不止乙個,則輸出所有答案並且不考慮順序。 你可以假設總是存在乙個答案。
示例 1:解題思路:輸入:[「shogun」, 「tapioca express」, 「burger king」, 「kfc」]
[「piatti」, 「the grill at torrey pines」, 「hungry hunter steakhouse」, 「shogun」]
輸出: [「shogun」]
解釋: 他們唯一共同喜愛的餐廳是「shogun」。
示例 2:
輸入:[「shogun」, 「tapioca express」, 「burger king」, 「kfc」]
[「kfc」, 「shogun」, 「burger king」]
輸出: [「shogun」]
解釋: 他們共同喜愛且具有最小索引和的餐廳是「shogun」,它有最小的索引和1(0+1)。
首先遍歷list1
一遍並為每個元素在雜湊表map
中建立乙個條目,格式為(list[i], i)
。這裡i
是第i
個元素的下標,list[i]
就是第i
個元素本身。這樣就建立了乙個從list1
中元素到它們下標的對映表。然後遍歷
list2
,對於每乙個元素list2[j]
,我們檢查在map
中是否已經存在相同元素的鍵。如果已經存在,說明這一元素在list1
和list2
中都存在。這樣我們就知道了這一元素在list1
和list2
中的下標,將它們求和sum = map.get(list[j]) + j
,如果這一sum
比之前記錄的最小值要小,我們更新返回的結果列表list
,裡面只儲存list2[j]
作為裡面唯一的條目。如果
sum
與之前獲得的最小值相等,那麼我們將list2[j]
放入結果列表list
。
public string[
]findrestaurant
(string[
] list1, string[
] list2)
mapmap =
newhashmap
<
>()
; list
list =
newarraylist
<
>()
;int min = list1.length + list2.length;
for(
int i =
0;i < list1.length;i++
)for
(int i =
0;i < list2.length;i++
)int j = map.
get(list2[i]);
if(i + j <= min)
list.
add(list2[i]);
}if(i >= min)
}return list.
toarray
(new
string
[list.
size()
]);}
Leetcode 599 兩個列表的最小索引總和
假設andy和doris想在晚餐時選擇一家餐廳,並且他們都有乙個表示最喜愛餐廳的列表,每個餐廳的名字用字串表示。你需要幫助他們用最少的索引和找出他們共同喜愛的餐廳。如果答案不止乙個,則輸出所有答案並且不考慮順序。你可以假設總是存在乙個答案。示例 1 輸入 shogun tapioca express...
LeetCode 599 兩個列表的最小索引總和
假設andy和doris想在晚餐時選擇一家餐廳,並且他們都有乙個表示最喜愛餐廳的列表,每個餐廳的名字用字串表示。你需要幫助他們用最少的索引和找出他們共同喜愛的餐廳。如果答案不止乙個,則輸出所有答案並且不考慮順序。你可以假設總是存在乙個答案。本題可以用雜湊對映map來解決。首先遍歷第乙個餐廳列表,將每...
LeetCode 599 兩個列表的最小總索引
假設andy和doris想在晚餐時選擇一家餐廳,並且他們都有乙個表示最喜愛餐廳的列表,每個餐廳的名字用字串表示。你需要幫助他們用最少的索引和找出他們共同喜愛的餐廳。如果答案不止乙個,則輸出所有答案並且不考慮順序。你可以假設總是存在乙個答案。示例 1 輸入 shogun tapioca express...