我有一次採訪中,並沒有下文所述的問題,一個元素:鑑於2個陣列,返回未包含在兩個數組
給定兩個數組,請計算結果:得到工會,然後取出從工會交叉。例如
int a[] = {1, 3, 4, 5, 7};
int b[] = {5, 3, 8, 10}; // didn't mention if has the same value.
result = {1,4,7,8,10}
這是我的想法:
- 排序
a
,b
。 - 使用
a
中的'dichotomy search'檢查每個項目b
。如果沒有找到,通過。否則,無論從a
刪除此項目,b
- 結果=留在
a
+元素的元素留在b
我知道這是一個糟糕的算法,但仍然是聊勝於無。有沒有比這更好的方法?
「二分法搜索」 - 你的意思是二進制搜索? – 2014-10-09 03:51:06
尋找'std :: set_difference'實現,它的C++,但你可以得到想法 – P0W 2014-10-09 04:01:23
假設數組a有n個元素,b有m個元素...(nlogn)+搜索每個元素爲O(nlogn)+生成結果數組爲O(n + m),總共爲O(nlogn)複雜度(或O(mlogm)+ O(nlogn)取決於是否n
2014-10-09 04:05:44