2024/12/6 【雜湊表】LeetCode1.兩數之和 【√】

axuu發表於2024-12-06

解法1:暴力解法

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            des = target - nums[i]
            if des in nums:
                for j in range(len(nums)):
                    if nums[j] == des and j != i:
                        return [i, j]

需要查詢一個元素是否出現過,使用雜湊法。

這裡不僅要知道對應的數值有沒有在列表裡出現過,還要知道索引。需要使用key value結構。

在C++裡面,要使用map。在Python中,可使用字典或者集合。

解法2:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        #使用字典
        records = dict()

        for index, value in enumerate(nums):
            if target - value in records:
                return[records[target - value], index]
            records[value] = index
        return []

解法3:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        #使用集合
        seen = set()
        for index, value in enumerate(nums):
            if target - value in seen:
                return [nums.index(target - value), index]
            seen.add(value)
        return []

相關文章