《Leetcode》350 兩個陣列的交集 II

2021-10-23 09:04:03 字數 1448 閱讀 2511

這個題目是兩個陣列i的公升級版本。它需要計算出交集的具體個數。

示例 1:

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

輸出:[2,2]

示例 2:

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

輸出:[4,9]

乙個hash表

set法

counter解法

class solution:

def intersect(self, nums1: list[int], nums2: list[int]) -> list[int]:

#兩個hash表

res1 = collections.defaultdict(int)

res2 = collections.defaultdict(int)

res =

if not nums1 or not nums2:

return

for i in nums1:

res1[i]+=1

for i in nums2:

res2[i]+=1

for key,value in res1.items():

if key in res2:

temp = min(value,res2[key])

res.extend([key]*temp)

return res

# 神奇解法

num1 = collections.counter(nums1)

num2 = collections.counter(nums2)

num = num1 & num2

return num.elements()

# 乙個hahs表

dic = collections.defaultdict(int)

res =

for i in nums1:

dic[i]+=1

for item in nums2:

if item in dic and dic[item]>=1:

dic[item]-=1

return res

#set法

temp = set(nums1)&set(nums2)

res =

for i in temp:

res.extend([i]*min(nums1.count(i),nums2.count(i)))

return res

總結:關於counter這個方法之後再寫一篇部落格詳細介紹,這個題目還有乙個解法就是雙指標和之前那個題目一毛一樣。如果涉及到出現次數的問題,一般情況還是用hash表。

leetcode 350兩個陣列的交集

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

leetcode350 兩個陣列的交集

還是用了暴力演算法,因為別的寫不出來,效率極低,nnd,貼 class solution for int k 0 k n k return nice 之後是雜湊表的做法,首先找到乙個長度較小的陣列,進行遍歷,並將其中的元素放入雜湊表,並記錄個數。之後就遍歷第二個陣列,每遇到乙個雜湊表中存在的數,就將...

leetcode 350 兩個陣列的交集

這題是 兩個陣列的交集 問題的第二版,多了乙個 輸出結果中每個元素出現的次數,應與元素在兩個陣列 現次數的最小值一致。這個要求。但仍舊可以用雜湊法來做。對其中陣列建立雜湊表,其中鍵為元素值,值為元素頻率。遍歷另乙個陣列的元素,每在雜湊表中找到相同元素,那麼就把其對應頻率減1並把陣列當前元素放入答案陣...