我接受了一次采访,并做了下面提到的一个问题:
给定两个数组,请计算结果:获取联合,然后从联合中删除交集。 e.g。
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
。b
的每个项目。在a
。如果没有找到,请通过。否则,请从a
,b
a
b
+元素中的元素
醇>
我知道这是一个糟糕的算法,但它总比没有好。有比这更好的方法吗?
答案 0 :(得分:0)
有很多方法可以解决这个问题。一种方法是:
1. construct hash-map using distinct array elements of array a with elements as keys and 1 is a value.
2. for every element,e in array b
if e in hash-map
set value of that key to 0
else
add e to result array.
3.add all keys from hash-map whose values 1 to result array.
答案 1 :(得分:0)
另一种方法可能是:
这有一个缺点:如果输入列表已经有双联,它就不起作用。但是既然我们在讨论集合和集合理论,我也希望输入是数学意义上的集合。
答案 2 :(得分:0)
另一种(在我看来是最好的)方法:
您不需要搜索两个列表。你可以按顺序迭代它们: