[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
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
157會員
309內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。