如何求集合之間的交集(重複元素)

2021-10-23 09:16:32 字數 1122 閱讀 1936

已知兩個或者多個集合,求他們的交集。

也就是集合之間公共的元素。

利用並查集,對集合**現的各種元素進行數量統計。然後再查詢驗證,選出每個集合都出現過的元素。

這裡會有乙個是使用map還是undered_map的選擇,可以參考一下這篇文章c++中map與unordered_map的區別

先將集合中的元素(一般是數字)進行排序,然後通過指針對集合進行遍歷。如果指標指向的元素相同,即為交集中的元素,如果不相同,則將指標後移。

如果記憶體有限,當集合比較大時,無法將其元素全部讀取到記憶體中,這時就應該採用並查集,因為用並查集進行查詢時,我們不用將集合中所有元素全度讀取出來,只需要在驗證的時候再讀取就行了。

但是排序的話就不行了,需要將所有元素全部讀取到記憶體中才能進行排序。

不過兩種方法都只適合只有兩三個集合的情況,如果集合過多,使用這兩種方法會比較麻煩。

上面的方法說明有些抽象,用乙個例題具體說明吧!

力扣350.兩個陣列的交集 ii

並查集:

class

solution

//再用乙個迴圈,遍歷nums2

for(

int num : nums2)

if(m[num]==0

) m.

erase

(num);}

return ans;}}

;

排序+雙指標:

class

solution

//當nums1[index1]比nums2[index2]小時,指標二向後移動一位

else

if(nums1[index1]

> nums2[index2]

)//當nums1[index1]比nums2[index2]相等時,將數字存入ans中,然後將兩個指標都向後移動一位

else

}return ans;}}

;

類似的題目還有力扣349.349. 兩個陣列的交集

這題與上一題的區別就是不考慮重複的元素。

如何去除List集合中的重複元素

在實際開發的時候,我們經常會碰到這麼乙個問題 乙個集合容器裡面有很多重複的物件,裡面的物件沒有主鍵,或者說忽略主鍵,根據業務的需求,我們需要根據條件篩選出沒有重複的物件。通過兩層迴圈來進行判斷,沒有重複的元素就加入到新集合中,新集合中已經有的元素就跳過。實體類使用lombok註解,推薦閱讀 lomb...

Set集合重複元素的判斷

set集合比較特殊,他的方法基本上和collection介面的方法一致,並且他沒有根據索引得到對應值的get int index 方法.更重要的是set集合不能放置重複的元素.她是怎麼判斷的呢?那麼,我們首先要讓物件具有比較性 一,儲存的自定義物件實現介面 comparable 複寫public i...

去除Set集合中的重複元素

去除 set 集合的重複元素的方法與 equals hashcode 方法有關 class person public class test1當你這樣輸出的時候,有可能會存在相同的元素存在 set 集合中,是因為你沒有重寫 equals hashcode 方法 class person public...