已知兩個或者多個集合,求他們的交集。
也就是集合之間公共的元素。
利用並查集,對集合**現的各種元素進行數量統計。然後再查詢驗證,選出每個集合都出現過的元素。
這裡會有乙個是使用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...