python實現兩個陣列的交集II

2021-10-12 13:25:05 字數 2354 閱讀 8198

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

示例 1:

輸入:nums1 = [1,2,2,1], nums2 = [2,2] 輸出:[2,2] 示例 2:

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

說明:輸出結果中每個元素出現的次數,應與元素在兩個陣列**現次數的最小值一致。 我們可以不考慮輸出結果的順序。 高階:

如果給定的陣列已經排好序呢?你將如何優化你的演算法? 如果 nums1 的大小比 nums2 小很多,哪種方法更優? 如果 nums2

的元素儲存在磁碟上,記憶體是有限的,並且你不能一次載入所有的元素到記憶體中,你該怎麼辦?

將兩個list排序,然後分別取出乙個元素,若不相等,則說明該元素不是交集。哪個列表中取出元素比較小,則取出該列表下乙個元素進行比較。若二者相等,則說明是交集,將兩個列表同時取出後乙個元素。直到有個list遍歷完結束。

# -*- coding: utf-8 -*-

'''問題簡述:

給定兩個陣列,求其兩個陣列的公有元素且保證次數想等。

基本思路:

首先將兩個list排序,然後逐個元素比較,若想等則為公有元素;不相等,小的往後移動一位。

直到遍歷完乙個list後,結束比較。

'''class

solution()

:'''

input: list1 , list2

output: list

'''defintersect

(self,nums1,nums2)

: res =

nums1.sort(

) nums2.sort(

)# 兩個陣列排序

p1,p2=0,

0# 建立兩個指標

# 直到遍歷完全才結束迴圈

while p1<

len(nums1)

and p2<

len(nums2)

:if nums1[p1]

< nums2[p2]

: p1+=

1elif nums1[p1]

==nums2[p2]:)

p1+=

1 p2+=

1else

: p2+=

1return res

if __name__ ==

'__main__'

: ilist1 =[1

,2,2

,1] ilist2=[2

,2] solu = solution(

) res = solu.intersect(ilist1,ilist2)

print

('交集為:\n'

,res)

若兩個list相差大,則直接遍歷短list中各個元素,在list2中查詢有沒有。

# -*- coding: utf-8 -*-

'''問題簡述:

給定兩個陣列,求其兩個陣列的公有元素且保證次數想等。

基本思路:

若兩個list長度相差大,則直接遍歷短的list中元素看在另乙個list中是否存在。

'''class

solution()

:'''

input: list1 , list2

output: list

'''defintersect

(self,nums1,nums2)

: res =

iflen

(nums1)

>

len(nums2)

: nums1,nums2 = nums2,nums1

for ele in nums1:

if ele in nums2:

nums2.remove(ele)

return res

if __name__ ==

'__main__'

: ilist1 =[1

,2,2

,1] ilist2=[2

,2] solu = solution(

) res = solu.intersect(ilist1,ilist2)

print

('交集為:\n'

,res)

a. 在第一種方法中:可以人為指定p1,p2來模擬c語言中的指標。

b. 方法二中:假如兩個list長度不等,而想把短的list放到前面,則可以首先比較下長短,提前人為交換一下。

兩個陣列的交集

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

兩個陣列的交集

題目 給定兩個陣列,編寫乙個函式來計算它們的交集。示例 1 輸入 nums1 1,2,2,1 nums2 2,2 輸出 2 示例 2 輸入 nums1 4,9,5 nums2 9,4,9,8,4 輸出 9,4 說明 首先說一下我自己的 菜雞 思路 我先是想先去重第第乙個陣列 nums1 然後迴圈判斷...

兩個陣列的交集

給定兩個陣列,編寫乙個函式來計算它們的交集。示例 1 輸入 nums1 1,2,2,1 nums2 2,2 輸出 2 示例 2 輸入 nums1 4,9,5 nums2 9,4,9,8,4 輸出 9,4 說明 輸出結果中的每個元素一定是唯一的。我們可以不考慮輸出結果的順序。排序 雙指標 set cl...