刷題總結:使用Python-雜湊表——兩數之和、兩個陣列的交集

林風風發表於2020-12-05

KW49/20:學習了雜湊表的知識,一共練習1個題目,現在總結如下。

第一題:兩數之和,給定一個陣列和一個目標值,在陣列中找出和為目標值的兩個數,並返回下標。

  1. 思路:首先想到的是雙重迴圈,列舉陣列中的每一個數,看target-x是否在陣列中。程式碼如下:
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:

        n = len(nums)
        for i in range(0, n):
            for j in range(i+1, n):
                if nums[i] + nums[j] == target:
                    return [i, j]

        return []

但是上述雙重迴圈方法時間複雜度高,考慮使用雜湊表來降低時間複雜度。程式碼如下:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:

        hash_table = dict()
        for i, num in enumerate(nums):
            if target - num in hash_table:
                return [hash_table[target-num], i]
            else:
                hash_table[num] = i

第二題:兩個陣列的交集,給定兩個陣列,給出他們的交集。

  1. 思路:首先想到的是用集合給陣列去重,然後遍歷集合中的每一個數,看另一個集合中是否存在。程式碼如下:
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        
        nums1 = set(nums1)
        nums2 = set(nums2)
        res = []
        for num1 in nums1:
            if num1 in nums2:
                res.append(num1)

        return res

也可以使用集合求交集的命令,程式碼更加簡化:

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        
        nums1 = set(nums1)
        nums2 = set(nums2)
        res = []
        res = nums1 & nums2  # 集合求交集
        # for num1 in nums1:
        #     if num1 in nums2:
        #         res.append(num1)

        return res

相關文章