LeetCode 兩個陣列的交集 I

2021-08-22 04:57:00 字數 1653 閱讀 3531

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

例子:

給定 num1=[1, 2, 2, 1], nums2 =[2, 2], 返回[2].

解題思路

由於問題中的元素是唯一的,所以我們只關心元素的有無,那麼我們可以使用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)

一種pythonic的做法

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)這個級別的。

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

LeetCode 兩個陣列的交集II

給定兩個陣列,編寫乙個函式來計算它們的交集。示例 1 輸入 nums1 1,2,2,1 nums2 2,2 輸出 2,2 示例 2 輸入 nums1 4,9,5 nums2 9,4,9,8,4 輸出 4,9 說明 輸出結果中每個元素出現的次數,應與元素在兩個陣列 現的次數一致。我們可以不考慮輸出結果...

LeetCode 兩個陣列的交集 II

題目 給定兩個陣列,寫乙個方法來計算它們的交集。例如 給定nums1 1,2,2,1 nums2 2,2 返回 2,2 注意 跟進 用map來建立nums1中字元和其出現個數之間的對映,然後遍歷nums2陣列,如果當前字元在map中的個數大於0,則將此字元加入結果res中,然後map的對應值自減1。...

leetcode 兩個陣列的交集 II

給定兩個陣列,編寫乙個函式來計算它們的交集。示例 1 輸入 nums1 1,2,2,1 nums2 2,2 輸出 2,2 示例 2 輸入 nums1 4,9,5 nums2 9,4,9,8,4 輸出 4,9 說明 輸出結果中每個元素出現的次數,應與元素在兩個陣列 現的次數一致。我們可以不考慮輸出結果...