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

閱讀時間約 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

86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
這題的題目在這裡: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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
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
對於要吃進肚子裏的東西非常在意源頭是否乾淨,但是對於要吸收到腦袋裏的知識與觀念卻不在乎是從哪裏來的,難道沒有人發現這個矛盾的事實嗎?
Thumbnail
說起自己在大學與日後人生中的朋友赫伯特.衛斯特(Herbert West)時,我總是滿懷恐懼。這種恐懼感並不全然來自他最近那樁失蹤事件散發出的不祥徵兆,而是由於他終生志業的性質。早在十七年前,當我們還在位於阿卡漢的米斯卡托尼克大學醫學院念大三時,這股恐懼感便已露出端倪。
Thumbnail
1950年代的日本推理文壇盛行著社會派的作品,被社會議題束縛的角色更容易引起讀者共鳴,然而作為推理的根本–論述及推導–卻逐漸凋零且看似沒有活路了,《殺人十角館》是如何救起這個世代?卻又被時代所淘汰的?
Thumbnail
最近想開啟「經典電影」「藝文選片」等影評計畫,剛好發現BBC曾在2016年評選出二十一世紀百大電影,而高居第一名的是大衛林區的《穆荷蘭大道》。 在對劇情一無所知的情況下直接看了電影,非常喜愛,連續看了兩遍!緊接著看的紀錄片《大衛林區:獨白囈語》,也讓人更加理解導演眼中的世界、他所沉浸的藝術實驗,
Thumbnail
<p>《權力遊戲》本季的女主角除了本來就是老魔頭的瑟曦以外,演技都有了明顯的成長,也許珊莎的火鳳凰還有丹妮莉絲的第三代莎拉康納都是不錯的磨練,讓最後女王的對決更有看頭!</p>
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
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
對於要吃進肚子裏的東西非常在意源頭是否乾淨,但是對於要吸收到腦袋裏的知識與觀念卻不在乎是從哪裏來的,難道沒有人發現這個矛盾的事實嗎?
Thumbnail
說起自己在大學與日後人生中的朋友赫伯特.衛斯特(Herbert West)時,我總是滿懷恐懼。這種恐懼感並不全然來自他最近那樁失蹤事件散發出的不祥徵兆,而是由於他終生志業的性質。早在十七年前,當我們還在位於阿卡漢的米斯卡托尼克大學醫學院念大三時,這股恐懼感便已露出端倪。
Thumbnail
1950年代的日本推理文壇盛行著社會派的作品,被社會議題束縛的角色更容易引起讀者共鳴,然而作為推理的根本–論述及推導–卻逐漸凋零且看似沒有活路了,《殺人十角館》是如何救起這個世代?卻又被時代所淘汰的?
Thumbnail
最近想開啟「經典電影」「藝文選片」等影評計畫,剛好發現BBC曾在2016年評選出二十一世紀百大電影,而高居第一名的是大衛林區的《穆荷蘭大道》。 在對劇情一無所知的情況下直接看了電影,非常喜愛,連續看了兩遍!緊接著看的紀錄片《大衛林區:獨白囈語》,也讓人更加理解導演眼中的世界、他所沉浸的藝術實驗,
Thumbnail
<p>《權力遊戲》本季的女主角除了本來就是老魔頭的瑟曦以外,演技都有了明顯的成長,也許珊莎的火鳳凰還有丹妮莉絲的第三代莎拉康納都是不錯的磨練,讓最後女王的對決更有看頭!</p>