求交集和並集的線性演算法

2021-07-02 05:21:42 字數 720 閱讀 3347

假設有集合a=, b=, 

1)求交集,需要得到結果:a∩b= 

思路如下: 

①建立乙個雜湊表(hashtable),其鍵(key)表示集合中數字的值,其值(value)表示集合中數字出現的次數 

②遍歷集合a,將集合中的每個數字(key)插入雜湊表,每個數字的出現次數(value)設定為1 

③遍歷集合b,對於集合中的每個數字: 

如果雜湊表中已經存在該數字,將對應的value改為2 

如果雜湊表中不存在該數字,忽略 

④遍歷雜湊表,輸出value為2的數字,即得到a和b的交集 

2) 求並集,需要得到結果:aub= 

思路如下: 

①建立乙個雜湊表(hashtable),其鍵(key)表示集合中數字的值,其值(value)可以無視 

②遍歷集合a,將集合中的每個數字(key)插入雜湊表 

③遍歷集合b,對於集合中的每個數字: 

如果雜湊表中已經存在該數字,忽略 

如果雜湊表中不存在該數字,將這個數字插入雜湊表 

④遍歷雜湊表,輸出雜湊表中的每個key,即為a和b的並集 

上面以兩個集合為例說明了交集和並集的求法,事實上,上述演算法可以很方便的擴充套件到3個或3個以上的集合 

的求交集和求並集。另外求並集時,由於雜湊表的值(value)部分不需要用到,所以這個資料結構也可以更換為 

雜湊集(hashset)。

refer to: 

JS陣列求並集,交集和差集

es7 filter結合includes 並集 let union a.concat b.filter v a.includes v 1,2,3,4,5 交集 let intersection a.filter v b.includes v 2 差集 let difference a.concat ...

oracle 交集和並集

今天研究了一下oracle 交集和並集,下面把我經過查詢資料,測試後,整理如下 1.並集 表1 insert into student1 values 1,學生1 insert into student1 values 1,學生2 insert into student1 values 1,學生3 ...

求兩個List的交集和並集

最近遇到的面試題,假設有兩個list分別為list1和list2 交集 list1.retainall list2 list1的資料就變成list1和list2的交集,list2不變。public class listtest system.out.println for int i 0 i lis...