LeetCode 599 兩個列表的最小索引總和

2021-10-24 12:43:57 字數 1945 閱讀 8431

難度:簡單

假設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中是否已經存在相同元素的鍵。如果已經存在,說明這一元素在list1list2中都存在。這樣我們就知道了這一元素在list1list2中的下標,將它們求和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...