天天看點

python怎麼返return兩個數組_Python實作"兩個數組的交集||"的兩種方法

給定兩個數組,寫一個方法輸出它們的交集

注意:

輸出結果中每一個元素出現的次數和兩個數組中 該元素同時出現的次數的一緻

輸出結果元素順序不做要求

進階:

如果給定的數組已經按序排好,如何調整優化你的算法?

如果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