求兩個集合的交集和並集

2021-10-03 02:38:56 字數 1159 閱讀 4270

交集:

用兩個指標分別指向兩個陣列的頭部。如果其中乙個元素比另乙個小,後移小的那個陣列的指標;如果相等,那麼把該元素新增到交集裡,同時後移兩個陣列的指標。一直這樣操作下去,直到有乙個指標超過陣列範圍。

public list intersection(int a, int b)else

}return result;

}

並集:

用兩個「指標」分別指向兩個陣列的頭部。如果其中乙個陣列的元素比另乙個小,把該元素新增到並集裡,後移小的那個陣列的指標;如果相等,那麼把該元素新增到並集裡,同時後移兩個陣列的指標。一直這樣操作下去,直到有乙個指標超過陣列範圍。將兩個陣列中沒有遍歷完的那個陣列的其餘元素全部新增進並集裡。

public list union(int a, int b)else

}while(i時間複雜度:

o(n)=o(m+n)    //m為第乙個陣列的長度,n為第二個陣列的長度

交集:

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

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

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

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

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

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

public list intersection(int a, int b)

}return result;

}

並集:

①建立乙個雜湊集(hashset)

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

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

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

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

④遍歷雜湊集,即為a和b的並集

public hashset union(int a, int b){

hashsetset=new hashset<>();

for(int i=0;i時間複雜度:

o(n)=o(max(m,n))    //m為第乙個陣列的長度,n為第二個陣列的長度

求兩個List的交集和並集

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

python 兩個list 求交集,並集,差集

在python中,陣列可以用list來表示。如果有兩個陣列,分別要求交集,並集與差集,怎麼實現比較方便呢?當然最容易想到的是對兩個陣列做迴圈,即寫兩個for迴圈來實現。這種寫法大部分同學應該都會,而且也沒有太多的技術含量,本博主就不解釋了。這裡給大家使用更為裝bility的一些方法。老規矩,talk...

Linux 兩個檔案求交集 並集 差集

sort a.txt b.txt uniq dsort a.txt b.txt uniq在 a.txt 檔案 現,不在 b.txt 檔案 現 sort a.txt b.txt b.txt uniq u在 b.txt 檔案 現,不在 a.txt 檔案 現 sort b.txt a.txt a.txt ...