[Python][Leetcode] 練習題目 Two Sum

更新 發佈閱讀 5 分鐘

1. Two Sum

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

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 <= 104-109 <= nums[i] <= 109-109 <= target <= 109Only one valid answer exists.

Follow-up: Can you come up with an algorithm that is less than O(n2) time complexity?

📝 題目說明

給定一個整數陣列 nums 和一個整數 target,請你從陣列中找出「兩個數」相加剛好等於 target,並回傳它們的「索引」。

⚠️ 限制:

  • 每個輸入只有 一組正確答案
  • 不能使用同一元素兩次
  • 回傳順序不拘(例如 [1,2][2,1] 都行)

🧠 解題思路

解法 1:暴力法(Brute Force)

雙層迴圈,把所有組合檢查一次。

時間複雜度:O(n²)

→ n 最大到 10⁴,這方法能解但效率不高。

程式碼:

def twoSum(nums, target):
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
if nums[i] == nums[j] == target / 2 and i != j:
return [i, j]
if nums[i] + nums[j] == target:
return [i, j]

解法 2:哈希表(Hash Map)——先存再找

思路:

建一個字典(map),將每個數字與索引記錄起來, 再檢查 target - nums[i] 是否在 map 中。

時間複雜度:O(n)

空間複雜度:O(n)

程式碼:

def twoSum(nums, target):
    hash_dit = {}
    for i,num in enumerate(nums):
        diff = target - num
        if diff in hash_dit:
            return hash_dit[diff] , i # 剛好加起來是 target
        hash_dit[num] = i #找不到就先存起來
    print('不在此列表')

🧠 哈希表的核心概念

🔹 Key → Value 直接定位

一般列表(list)是靠「位置」找資料,例如 nums[3]。

但字典(hash table)是靠「key」找資料,例如 price["apple"]。

哈希表存取方式:

table[key] = value   # 存
value = table[key] # 取

時間複雜度:

  • 查詢:O(1)
  • 新增:O(1)
  • 刪除:O(1)

非常快。


🧪 測試

nums = [2,7,11,15,17,20,50,90]

target = 110

結果索引(5,7) 驗算nums[5] + nums[7] = 20 + 90 =110 剛好為我們target值

raw-image


raw-image



留言
avatar-img
螃蟹_crab的沙龍
166會員
321內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
你可能也想看
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
看完上篇 4 位新成員的靈魂拷問,是不是意猶未盡?別急,野格團新血的驚喜正接著登場!今天下篇接力的另外 4 位「個人主題專家」,戰力同樣驚人──領域從旅行美食、運動、商業投資到自我成長;這些人如何維持長跑般的創作動力?在爆紅的文章背後,又藏著哪些不為人知的洞察?5 大靈魂拷問繼續出擊
Thumbnail
看完上篇 4 位新成員的靈魂拷問,是不是意猶未盡?別急,野格團新血的驚喜正接著登場!今天下篇接力的另外 4 位「個人主題專家」,戰力同樣驚人──領域從旅行美食、運動、商業投資到自我成長;這些人如何維持長跑般的創作動力?在爆紅的文章背後,又藏著哪些不為人知的洞察?5 大靈魂拷問繼續出擊
Thumbnail
這篇文章探討LeetCode第28題:在字串中查找子字串的第一次出現索引。文章說明瞭解題思路,並使用Python的字串切片方法(slicing)有效率地解決問題,包含範例、程式碼及效能考量。
Thumbnail
這篇文章探討LeetCode第28題:在字串中查找子字串的第一次出現索引。文章說明瞭解題思路,並使用Python的字串切片方法(slicing)有效率地解決問題,包含範例、程式碼及效能考量。
Thumbnail
Leetcode 28 解題思路與程式碼範例。文章詳細解釋瞭如何使用迴圈比較字串,找出目標字串在主字串中的第一次出現位置。也提到了使用 slicing strings 方法可以提升效率。
Thumbnail
Leetcode 28 解題思路與程式碼範例。文章詳細解釋瞭如何使用迴圈比較字串,找出目標字串在主字串中的第一次出現位置。也提到了使用 slicing strings 方法可以提升效率。
Thumbnail
對於剛學習Python的初學者,本文建議從Codewars開始,因為該平臺的題目難度比較適合新手,循序漸進,讓初學者能更快上手。在具備基本能力後,可轉向LeetCode進行更高難度的資料結構與演算法的練習,以提升解題速度和能力。
Thumbnail
對於剛學習Python的初學者,本文建議從Codewars開始,因為該平臺的題目難度比較適合新手,循序漸進,讓初學者能更快上手。在具備基本能力後,可轉向LeetCode進行更高難度的資料結構與演算法的練習,以提升解題速度和能力。
Thumbnail
Leetcode 精選75題 題目與題解 熱門考點 目錄 (持續更新中) 建議從左側目錄 或者 按Ctrl+F輸入關鍵字進行搜尋
Thumbnail
Leetcode 精選75題 題目與題解 熱門考點 目錄 (持續更新中) 建議從左側目錄 或者 按Ctrl+F輸入關鍵字進行搜尋
Thumbnail
題目敘述 給定一個非零陣列nums,請找出陣列裡面 最大的對偶數 是誰? 如果無解,請返回-1 對偶數定義: 整數k的對偶數是-k 例如: 99 和 -99互為對偶數。
Thumbnail
題目敘述 給定一個非零陣列nums,請找出陣列裡面 最大的對偶數 是誰? 如果無解,請返回-1 對偶數定義: 整數k的對偶數是-k 例如: 99 和 -99互為對偶數。
Thumbnail
1. Two Sum 解題
Thumbnail
1. Two Sum 解題
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News