兩個整數集合最快演算法求交集

2021-08-20 17:37:53 字數 581 閱讀 5806

,b

兩個整數集合,設計乙個演算法求他們的交集,盡可能的高效。

一、第一種演算法,暴力求解,直接採用遍歷或者列舉的方法,這種辦法最簡單易想,但是時間複雜度比較高,為

o(n^2),這是最複雜的情況。

二、預處理。其實思想和c語言中的預處理一樣,對資料記性歸一化處理。說白了,就是對陣列先進行排序。陣列排序的演算法時間複雜度最低是o(nlogn),數量級已經低於第一種演算法的時間複雜度。

例如已經排序好的兩個陣列a,b,使用下列偽**進行判斷交集:

int find()

return result;

}時間複雜度為o(n),綜合排序的時間複雜度則整體複雜度為:o(nlogn)

三、計數排序。也就是把兩個陣列a和b都遍歷到乙個新的陣列裡,然後在統計重複的數字即可,這個時間複雜度就是o(n)。當然,計數排序是有條件的,也就是要求陣列內數字的範圍是已知並且不是很大,否則使用這種辦法得不償失。

四、根據演算法三應該大家能夠想到用雜湊函式或者雜湊表來解決問題。也就是將陣列a雜湊到雜湊表中,然後繼續將陣列b雜湊到雜湊表中,如果發生雜湊碰撞則統計加1,最後可以得出陣列的交集。時間複雜度也就是雜湊所有元素的複雜度o(n)。

兩個整數集合最快演算法求交集 F hawk189

b 兩個整數集合,設計乙個演算法求他們的交集,盡可能的高效。一 第一種演算法,暴力求解,直接採用遍歷或者列舉的方法,這種辦法最簡單易想,但是時間複雜度比較高,為 o n 2 這是最複雜的情況。二 預處理。其實思想和c語言中的預處理一樣,對資料記性歸一化處理。說白了,就是對陣列先進行排序。陣列排序的演...

兩個有序集合求交集

方案一 暴力法,for for,時間複雜度o n n 當資料量很大時,不可取 方案二 拉鍊法 有序集合1 有序集合2 兩個指標指向首元素,比較元素的大小 1 如果相同,放入結果集,隨意移動乙個指標 2 否則,移動值較小的乙個指標,直到隊尾 這種方法的好處是 1 集合中的元素最多被比較一次,時間複雜度...

求兩個有序整數集合的交集,比比誰的演算法快!

方法一 1 private static setsetmethod int a,int b 7for int j 0 j 11return set2 12 方法二 1 private static setformethod int a,int b 14 15 return set 16 方法三 1 ...