方法一:
1private
static setsetmethod(int a,int
b)7for(int j=0; j)
11return
set2;
12 }
方法二:
1private
static setformethod(int a,int
b)14}15
return
set;
16 }
方法三:
1private
static
int intersect(int a, int
b) 5int intersection = new
int[math.max(a.length, b.length)];
6int offset = 0;
7for (int i = 0, s = i; i < a.length && s < b.length; i++)
11if (a[i] ==b[s])
14while (i < (a.length - 1) && a[i] == a[i + 1]) 17}
18if (intersection.length ==offset)
21int duplicate = new
int[offset];
22 system.arraycopy(intersection, 0, duplicate, 0, offset);
23return
duplicate;
24 }
三種方法的效能對比測試:
1public
class
numbercrosstest
7int a2 = new
int[200000];
8for (int i = 0; i < a2.length; i++)
11long begin =system.currenttimemillis();
12 setset1 =setmethod(a1, a2);
13long end =system.currenttimemillis();
14 system.out.println(end - begin);//
35915 begin =system.currenttimemillis();
16 setset2 =formethod(a1, a2);
17 end =system.currenttimemillis();
18 system.out.println(end - begin);//
16019 begin =system.currenttimemillis();
20int c =intersect(a1, a2);
21 end =system.currenttimemillis();
22 system.out.println(end - begin);//
1023
//測試兩種方法的結果是否相等
24 system.out.println(set1.equals(set2));//
true
25 setset3 = new hashset();
26for (int i = 0; i < c.length; i++)
29 system.out.println(set1.equals(set3));//
true30}
3132
private
static setsetmethod(int a, int
b) 38for (int j = 0; j < b.length; j++)
42return
set2;43}
4445
private
static setformethod(int a, int
b) 58}
59return
set;60}
6162
private
static
int intersect(int a, int
b) 66int intersection = new
int[math.max(a.length, b.length)];
67int offset = 0;
68for (int i = 0, s = i; i < a.length && s < b.length; i++)
72if (a[i] ==b[s])
75while (i < (a.length - 1) && a[i] == a[i + 1]) 78}
79if (intersection.length ==offset)
82int duplicate = new
int[offset];
83 system.arraycopy(intersection, 0, duplicate, 0, offset);
84return
duplicate;85}
86 }
結果對比:
方法一用時:359 毫秒
方法二用時:160 毫秒
方法三用時:10 毫秒
兩個有序集合求交集
方案一 暴力法,for for,時間複雜度o n n 當資料量很大時,不可取 方案二 拉鍊法 有序集合1 有序集合2 兩個指標指向首元素,比較元素的大小 1 如果相同,放入結果集,隨意移動乙個指標 2 否則,移動值較小的乙個指標,直到隊尾 這種方法的好處是 1 集合中的元素最多被比較一次,時間複雜度...
兩個整數集合最快演算法求交集
b 兩個整數集合,設計乙個演算法求他們的交集,盡可能的高效。一 第一種演算法,暴力求解,直接採用遍歷或者列舉的方法,這種辦法最簡單易想,但是時間複雜度比較高,為 o n 2 這是最複雜的情況。二 預處理。其實思想和c語言中的預處理一樣,對資料記性歸一化處理。說白了,就是對陣列先進行排序。陣列排序的演...
Python演算法 如何求兩個有序集合的交集
兩個有序集合,集合中每個元素都是一段範圍,求其交集。例如集合和的交集為。最簡單方法就是遍歷兩個集合,針對集合中每個元素判斷是否有交集,如果有,則求其交集。方法一沒有利用集合有序的特點,因此,不是最佳的方法。假設兩個集合s1,s2,當前比較集合為s1 i 與s2 j 其中i與j分別是集合s1與s2的下...