經典 字典應用題 兩數之和 Two Sum_Leetcode #1

更新於 2024/11/20閱讀時間約 3 分鐘

題目敘述

題目會給我們一個陣列,要求我們返回 兩數之和=target所在的陣列索引值。

題目還額外保證一定剛好有一組解


對應的中文教學影片

搭配服用,效果更佳~



測試範例

Example 1:

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].

Example 2:

Input: nums = [3,2,4], target = 6
Output: [1,2]

Example 3:

Input: nums = [3,3], target = 6
Output: [0,1]

約束條件

Constraints:

  • 2 <= nums.length <= 10^4
  • -10^9 <= nums[i] <= 10^9
  • -10^9 <= target <= 10^9
  • Only one valid answer exists.

演算法

除了第一直覺的暴力雙層迴圈搜索之外,其實還有一個更高效率的字典演算法。


題目已經給定two sum的定義如下

x + y = nums[i] + nums[j] = target, where i =/= j

移項得到

y = nums[j] = target - nums[i]

= nums[i] 遇到誰,相加就可以等於target

= x 遇到誰,相加就可以等於target

= 互補的值,相加就可以等於target


因此,我們可以建立一個字典,key就是當下的陣列元素,value則對應到當下的陣列索引值array index。

從左到右,依序掃描每一個陣列元素,假如在字典中找到nums[i]所需要的互補的值,兩者相加等於target,那麼回傳當下這組two sum的陣列索引值,就是答案!


題目一開始有保證,一定存在恰好一組解


程式碼

class Solution:
 def twoSum(self, nums: List[int], target: int) -> List[int]:
  
  # key: number
  # value: index
  history = {}

  for index, x in enumerate(nums):

   y = target - x

   # look-up table
   if y in history:
    # there exists a pair, x + y = target
    return [ history[y], index]

   # update table, save x's index into history
   history[x] = index

  return [-1, -1]

複雜度分析

時間複雜度: O(n)

線性掃描,從左到右掃描每個陣列元素,總共耗時O(n)


空間複雜度: O(n)

建立了一個字典,大小最大為元素總數,所占空間為O(n)


關鍵知識點

題目一開始有保證,一定存在恰好一組解

我們可以建立一個字典,key就是當下的陣列元素,value則對應到當下的陣列索引值array index。

從左到右,依序掃描每一個陣列元素,假如在字典中找到nums[i]所需要的互補的值,兩者相加等於target,那麼回傳當下這組two sum的陣列索引值,就是答案!


Reference:

[1] Python/JS/Go/C++ O(n) by dict. [w/ Hint] - Two Sum - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
這題的題目在這裡:Find Pivot Index 題目敘述 題目會給我們一個整數陣列nums,要求我們計算平衡軸心點在哪? 平衡軸心的意思就是軸心點索引左側的元素總合 = 軸心點索引右側的元素總合
題目會給我們一個方陣,要求我們計算兩條對角線的元素總和。
題目會給我們一個整數陣列nums,裡面都是正整數,而且陣列長度保證是偶數。 要求我們倆倆將所有整數配對成一組pair,要求我們最小化pair sum的極大值。
這題的題目在這裡:Gray Code 題目敘述 題目會給我們一個bit寬度n,要求我們造出所有格雷編碼。 格雷編碼就是一組二進位編碼,每兩個相鄰的編碼的hamming distance都是1。 如果第一次接觸的讀者,可以參考 Wiki Gray Code
題目會給我們一個字串陣列nums,內容都是二進位字串,要求我們造出一個另一個相等長度,新的二進位字串,而且不和字串陣列nums內的重複。 答案可能有不只一組,回傳合任一組合法的答案皆可。
題目會給我們一個字串s,內容都是由英文小寫字母組成,要求我們計算長度為3的回文子序列有多少個? 舉例,aba者種形式的序列,就是長度為3的回文序列。
這題的題目在這裡:Find Pivot Index 題目敘述 題目會給我們一個整數陣列nums,要求我們計算平衡軸心點在哪? 平衡軸心的意思就是軸心點索引左側的元素總合 = 軸心點索引右側的元素總合
題目會給我們一個方陣,要求我們計算兩條對角線的元素總和。
題目會給我們一個整數陣列nums,裡面都是正整數,而且陣列長度保證是偶數。 要求我們倆倆將所有整數配對成一組pair,要求我們最小化pair sum的極大值。
這題的題目在這裡:Gray Code 題目敘述 題目會給我們一個bit寬度n,要求我們造出所有格雷編碼。 格雷編碼就是一組二進位編碼,每兩個相鄰的編碼的hamming distance都是1。 如果第一次接觸的讀者,可以參考 Wiki Gray Code
題目會給我們一個字串陣列nums,內容都是二進位字串,要求我們造出一個另一個相等長度,新的二進位字串,而且不和字串陣列nums內的重複。 答案可能有不只一組,回傳合任一組合法的答案皆可。
題目會給我們一個字串s,內容都是由英文小寫字母組成,要求我們計算長度為3的回文子序列有多少個? 舉例,aba者種形式的序列,就是長度為3的回文序列。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
宗教電影,是影史裡很特殊的一種電影類型。它似乎是為了宗教信徒而製作的,目的似乎是為了宣揚宗教人物的偉大。這樣說來,非教徒觀眾似乎不是宗教電影的客群。事實卻並非如此,許多宗教電影都有能感動普世的藝術價值。史柯西斯的《基督的最後誘惑》 是個例子;1987年台灣導演李作楠執導的《六祖慧能傳》,以及19
Thumbnail
本文透過幽默的對話,展現男方的示愛行為如何遭到女性的冷漠和嘲諷。 網路文化的影響使得情感表達變得不再直接,對於玩笑和示愛的敏感度也提高了。 引發讀者對於浪漫的再思考。
Thumbnail
五星推薦華語經典電影「霸王別姬」,霸王別姬是一部"藝術電影"有其深度與文化意涵,電影有很多令人值得深入探究的問題,讓觀眾如此著迷的還有張國榮詮釋的京劇名旦程蝶衣,真是不瘋魔不成活!
Thumbnail
這篇文章介紹了經典的瑪德蓮(Madeleine)配方及其詳細製作步驟,包括所需的材料和烘焙技巧。瑪德蓮是一種法式小點心,以其獨特的形狀和鬆軟口感而知名,適合搭配咖啡或茶。透過本文提供的簡易方法,任何烘焙新手都能在家裡製作出美味的瑪德蓮,為日常生活增添更多甜蜜的滋味。
Thumbnail
《好餓的毛毛蟲》是一本深受孩子與家長喜愛的繪本,透過簡單的故事和可愛的插圖,描繪毛毛蟲從誕生到變成蝴蝶的過程。這本書不僅提供了數學概念的學習,還能促進親子互動,幫助孩子瞭解健康飲食。多種版本的繪本設計,使其更具吸引力,是家庭閱讀的不二選擇。
Thumbnail
企劃內容 為容易喜新厭舊的女兒企劃一個前所未見的口罩! 練習日期:2022/10/03 奧斯本檢核法練習方法 先想出一個想要解決的問題,並且問九個概念性問題,透過這些機械性的思考,弄出容易發想的點子,產生新構想
Thumbnail
〈Danger Zone〉— Kenny Loggins(K-Log) Loggins&Jim Messina Sittin' In,直到1977年K-Log單飛之前,他們都是以二人組Loggins&Messina的形式錄製。
Thumbnail
你是否曾想像過,邁向四開頭的自己,人生應該會是什麼樣的光景? 「不如我們就來假裝成高中女生吧!」 從此之後野末開始了與外川的高中女生生活。明天要吃甚麼甜點呢?野末開始期待與外川吃甜點的時光──
Thumbnail
不知道你有沒有看過《魔幻聖誕頌A Christmas Carol》這套電影,這個故事是改編自狄更斯的作品《聖誕頌歌》,講述的是在臨近聖誕節的一個晚上,孤寒財主史高治如常獨自一人在家,然後三隻聖誕精靈來造訪他,他們分別來自「過去」、「現在」以及「未來」。 【個人網站】 【加密貨幣】 【冷錢包推薦】
Thumbnail
愛情的追求與技巧,一直都是永不退燒的話題。近年來市面上不少課程教導我們該如何擇偶,不論是說話技巧、穿搭甚至是很多的"術",其實說穿了都是可以用基因的角度來做破解的。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
宗教電影,是影史裡很特殊的一種電影類型。它似乎是為了宗教信徒而製作的,目的似乎是為了宣揚宗教人物的偉大。這樣說來,非教徒觀眾似乎不是宗教電影的客群。事實卻並非如此,許多宗教電影都有能感動普世的藝術價值。史柯西斯的《基督的最後誘惑》 是個例子;1987年台灣導演李作楠執導的《六祖慧能傳》,以及19
Thumbnail
本文透過幽默的對話,展現男方的示愛行為如何遭到女性的冷漠和嘲諷。 網路文化的影響使得情感表達變得不再直接,對於玩笑和示愛的敏感度也提高了。 引發讀者對於浪漫的再思考。
Thumbnail
五星推薦華語經典電影「霸王別姬」,霸王別姬是一部"藝術電影"有其深度與文化意涵,電影有很多令人值得深入探究的問題,讓觀眾如此著迷的還有張國榮詮釋的京劇名旦程蝶衣,真是不瘋魔不成活!
Thumbnail
這篇文章介紹了經典的瑪德蓮(Madeleine)配方及其詳細製作步驟,包括所需的材料和烘焙技巧。瑪德蓮是一種法式小點心,以其獨特的形狀和鬆軟口感而知名,適合搭配咖啡或茶。透過本文提供的簡易方法,任何烘焙新手都能在家裡製作出美味的瑪德蓮,為日常生活增添更多甜蜜的滋味。
Thumbnail
《好餓的毛毛蟲》是一本深受孩子與家長喜愛的繪本,透過簡單的故事和可愛的插圖,描繪毛毛蟲從誕生到變成蝴蝶的過程。這本書不僅提供了數學概念的學習,還能促進親子互動,幫助孩子瞭解健康飲食。多種版本的繪本設計,使其更具吸引力,是家庭閱讀的不二選擇。
Thumbnail
企劃內容 為容易喜新厭舊的女兒企劃一個前所未見的口罩! 練習日期:2022/10/03 奧斯本檢核法練習方法 先想出一個想要解決的問題,並且問九個概念性問題,透過這些機械性的思考,弄出容易發想的點子,產生新構想
Thumbnail
〈Danger Zone〉— Kenny Loggins(K-Log) Loggins&Jim Messina Sittin' In,直到1977年K-Log單飛之前,他們都是以二人組Loggins&Messina的形式錄製。
Thumbnail
你是否曾想像過,邁向四開頭的自己,人生應該會是什麼樣的光景? 「不如我們就來假裝成高中女生吧!」 從此之後野末開始了與外川的高中女生生活。明天要吃甚麼甜點呢?野末開始期待與外川吃甜點的時光──
Thumbnail
不知道你有沒有看過《魔幻聖誕頌A Christmas Carol》這套電影,這個故事是改編自狄更斯的作品《聖誕頌歌》,講述的是在臨近聖誕節的一個晚上,孤寒財主史高治如常獨自一人在家,然後三隻聖誕精靈來造訪他,他們分別來自「過去」、「現在」以及「未來」。 【個人網站】 【加密貨幣】 【冷錢包推薦】
Thumbnail
愛情的追求與技巧,一直都是永不退燒的話題。近年來市面上不少課程教導我們該如何擇偶,不論是說話技巧、穿搭甚至是很多的"術",其實說穿了都是可以用基因的角度來做破解的。