給定兩個陣列,編寫乙個函式來計算它們的交集。將兩個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]
說明:輸出結果中每個元素出現的次數,應與元素在兩個陣列**現次數的最小值一致。 我們可以不考慮輸出結果的順序。 高階:
如果給定的陣列已經排好序呢?你將如何優化你的演算法? 如果 nums1 的大小比 nums2 小很多,哪種方法更優? 如果 nums2
的元素儲存在磁碟上,記憶體是有限的,並且你不能一次載入所有的元素到記憶體中,你該怎麼辦?
# -*- 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...