前往
大廳
主題

LeetCode - 599. Minimum Index Sum of Two Lists 解題心得

Not In My Back Yard | 2020-12-04 00:00:09 | 巴幣 0 | 人氣 366

題目連結:


題目意譯:
假設 Andy 和 Doris 想要選個餐廳吃晚餐,而他們兩個各自都有最喜歡的餐廳列表(以多個字串表示)

你需要幫他們找出他們的共同喜好,且該喜好在兩列表中的索引值和為最小。如果有多種選擇,則全數列出且不須按照任何順序。你可以假設一定存在一個選擇。

限制:
1 ≦ list1.length 、 list2.length ≦ 1000
1 ≦ list1[i].length 、 list2[i].length ≦ 30
list1[i] 和 list2[i] 由空白字元「 」以及英文字母組成。
list1 中的字串皆相異。
list2 中的字串皆相異



範例測資:
範例 1:
輸入: list1 = ["Shogun","Tapioca Express","Burger King","KFC"] 、 list2 = ["Piatti","The Grill at Torrey Pines","Hungry Hunter Steakhouse","Shogun"]
輸出: ["Shogun"]
解釋: 唯一一間他們都喜歡的餐廳為 "Shogun"。

範例 2:
輸入: list1 = ["Shogun","Tapioca Express","Burger King","KFC"] 、 list2 = ["KFC","Shogun","Burger King"]
輸出: ["Shogun"]
解釋: 他們兩個都喜歡且索引值和最小的為 "Shogun",其索引值和為 1 (0 + 1) 。

範例 3:
輸入: list1 = ["Shogun","Tapioca Express","Burger King","KFC"] 、 list2 = ["KFC","Burger King","Tapioca Express","Shogun"]
輸出: ["KFC","Burger King","Tapioca Express","Shogun"]

範例 4:
輸入: list1 = ["Shogun","Tapioca Express","Burger King","KFC"] 、 list2 = ["KNN","KFC","Burger King","Tapioca Express","Shogun"]
輸出: ["KFC","Burger King","Tapioca Express","Shogun"]

範例 5:
輸入: list1 = ["KFC"] 、 list2 = ["KFC"]
輸出: ["KFC"]


解題思維:
將其中一個列表的字串放進雜湊表(Hash Table)裡,並使得每個字串對應到其索引值。

然後掃過另一個列表,每碰到一個字串就去雜湊表裡找看看有沒有一樣的字串。如果有,則將雜湊表裡映射的索引值加上現在這個字串的索引值得一和 S 。

如果 S 小於目前的索引值之和最小值,則更新答案陣列的內容,將現在的字串放進答案裡並更新最小值;如果 S 與最小值一樣大,則將此字串加入到答案陣列之中。

最後的答案陣列即是所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作