349. 兩個(gè)數(shù)組的交集
1.1題目描述
https://leetcode-cn.com/problems/intersection-of-two-arrays
給定兩個(gè)數(shù)組,編寫一個(gè)函數(shù)來計(jì)算它們的交集。
示例 1:
輸入: nums1 = [1,2,2,1], nums2 = [2,2]
輸出: [2]
示例 2:
輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出: [9,4]
說明:
- 輸出結(jié)果中的每個(gè)元素一定是唯一的。
- 我們可以不考慮輸出結(jié)果的順序。
1.2代碼詳解
使用set集合
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
set1 = set(nums1)
set2 = set(nums2)
if len(set1) < len(set2):
return self.set_insert(set1,set2)
else:
return self.set_insert(set2,set1)
def set_insert(self, set1, set2):
return [x for x in set1 if x in set2]
?
350. 兩個(gè)數(shù)組的交集 II
2.1題目描述
https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/
給定兩個(gè)數(shù)組,編寫一個(gè)函數(shù)來計(jì)算它們的交集。
示例 1:
輸入: nums1 = [1,2,2,1], nums2 = [2,2]
輸出: [2,2]
示例 2:
輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出: [4,9]
說明:
輸出結(jié)果中每個(gè)元素出現(xiàn)的次數(shù),應(yīng)與元素在兩個(gè)數(shù)組中出現(xiàn)的次數(shù)一致。
我們可以不考慮輸出結(jié)果的順序。
進(jìn)階:
- 如果給定的數(shù)組已經(jīng)排好序呢?你將如何優(yōu)化你的算法?
- 如果?nums1?的大小比?nums2?小很多,哪種方法更優(yōu)?
- 如果?nums2?的元素存儲(chǔ)在磁盤上,磁盤內(nèi)存是有限的,并且你不能一次加載所有的元素到內(nèi)存中,你該怎么辦?
2.2代碼詳解
class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
counts = {} # key:元素 ,value:出現(xiàn)頻次
res = []
for num in nums1:
counts[num] = counts.get(num, 0) + 1 # 記錄nums1 中每個(gè)數(shù)出現(xiàn)的頻次
# 遍歷nums2
for num in nums2:
# counts[num] > 0 表示nums2 中有nums1 相同的元素
if num in counts and counts[num] > 0:
res.append(num)
counts[num] -= 1 # 查找到對(duì)應(yīng)后的元素失效
return res
錯(cuò)誤案例:
原因:如測(cè)試用例中的 [5] ,字典中沒有這個(gè)值
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
