Leetcode 349 兩個陣列的交集

2021-09-11 03:08:18 字數 1610 閱讀 4455

給定兩個陣列,編寫乙個函式來計算它們的交集。

示例 1:

輸入: nums1 = [1,2,2,1], nums2 = [2,2]

輸出: [2]

示例 2:

輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]

輸出: [9,4]

說明:輸出結果中的每個元素一定是唯一的。

我們可以不考慮輸出結果的順序。

思路1:

剛學完set()集合,就用上了,由於問題中的元素是唯一的,所以我們只關心元素的有無,那麼我們可以就使用set這個結構(因為set()是一種無序不重複的資料結構)。首先將nums1的所有資料存入set中,查詢nums2中的資料是否在這個set中,如果在的話,我們將這個元素存入乙個list裡面。

class solution:

def intersection(self, nums1, nums2):

""":type nums1: list[int]

:type nums2: list[int]

:rtype: list[int]

"""nums1 = set(nums1)

result = set()

for i in nums2:

if i in nums1:

result.add(i)

return list(result)

一開始出現:exception: type : not implemented的原因是因為最後我return的result是乙個set但是我需要的是列表,所以加上乙個list()

思路2:利用python的正規表示式?在set裡做完

class solution:

def intersection(self, nums1, nums2):

""":type nums1: list[int]

:type nums2: list[int]

:rtype: list[int]

"""result = set([i for i in nums1 if i in nums2])

return list(result)

思路3:直接用python苦短,可以&找交集。

class solution:

def intersection(self, nums1, nums2):

""":type nums1: list[int]

:type nums2: list[int]

:rtype: list[int]

"""return list(set(nums1) & set(nums2))

這個是速度最快的,我們知道一般set的底層實現是通過平衡二叉樹實現的,那麼新增元素和搜尋元素的時間複雜度都是o(logn)這個級別的,那麼上述的演算法時間複雜度是o(nlogn)這個級別的。

在python中set的底層實現是通過hash表實現的,所以新增元素和搜尋元素的時間複雜度都是o(1)級別的,那麼上述的演算法時間複雜度是o(n)這個級別的。而空間複雜度依舊是o(n)級別的。如果要使用平衡二叉樹的版本,要使用frozenset。因為我們使用了兩個set,所以空間複雜度是o(n)級別的。

leetcode349 兩個陣列交集

思想 題目要求給定兩個陣列,編寫乙個函式來計算它們的交集。1.定義變數ans儲存兩個陣列的交集 2.將nums1和nums2去重 3.判斷nums1中的元素num是否在nums2中,若在則新增ans中,不在則繼續for迴圈 class solution object def intersection...

LeetCode349 兩個陣列的交集

給定兩個陣列,寫乙個函式來計算它們的交集。例子 給定num1 1,2,2,1 nums2 2,2 返回 2 題目分析 首先,將num1的元素存進s1,完成了一步去重 同樣,將num2的元素存進s2,也完成了一步去重 將所有的元素存進s.所以s s1 展示 class solution for aut...

Leetcode 349 兩個陣列的交集

給定兩個陣列,編寫乙個函式來計算它們的交集。示例 1 輸入 nums1 1,2,2,1 nums2 2,2 輸出 2 示例 2 輸入 nums1 4,9,5 nums2 9,4,9,8,4 輸出 9,4 說明 輸出結果中的每個元素一定是唯一的。我們可以不考慮輸出結果的順序。class solutio...