給定兩個數組,寫一個方法輸出它們的交集
注意:
輸出結果中每一個元素出現的次數和兩個數組中 該元素同時出現的次數的一緻
輸出結果元素順序不做要求
進階:
如果給定的數組已經按序排好,如何調整優化你的算法?
如果nums1的長度小于nums2,哪一種算法更好?
如果nums2的元素存儲在磁盤上,磁盤記憶體有限以緻于無法一次性加載所有元素,此時該怎麼辦?
1:不考慮進階。排序nums1和nums2,然後進行相應操作def intersect(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
nums1.sort()
nums2.sort()
numsList = []
count1 = 0
count2 = 0
while count1 < len(nums1) and count2 < len(nums2):
if nums1[count1] == nums2[count2]:
numsList.append(nums1[count1])
count1 += 1
count2 += 1
elif nums1[count1] < nums2[count2]:
count1 += 1
else:
count2 += 1
return numsList
2:(不考慮元素排序)借助字典,存放nums1中出現的元素和對應的次數,然後通路nums2,進行對應操作(參考他人)def intersect(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
nums1Dic = {}
numsList = []
for i in nums1:
if nums1Dic.get(i):
nums1Dic[i] += 1
else:
nums1Dic[i] = 1
for i in nums2:
if nums1Dic.get(i) > 0:
numsList.append(i)
nums1Dic[i] -= 1
return numsList