实现两个数组比较的最佳逻辑

时间:2018-04-14 15:47:50

标签: logic combinations permutation

我有两个数组-arr 1和arr 2,这里两个数组都有一些常用项和许多不常见的项,首先应从两个数组中删除常用项。

因此,对于arr 1中的每个不常见项,可能是arr 2中两个或更多个值的总和,反之亦然。如果找到该值,则必须从相应的数组中移除这些值。最后,输出应该只是两个数组上不匹配的值

我需要一个逻辑,我可以用更快的方式进行计算。

1 个答案:

答案 0 :(得分:0)

我不会给出实现你逻辑的代码,但我很乐意指出你正确的方向。

我用C ++编写代码,所以我会回答这个问题。如果你想要一种不同的语言,我相信你可以自由地这样做。

  

删除常用元素:

首先对数组arr1arr2进行排序。然后对它们进行set_symmetric_difference。这将有效地在线性时间内运行。然后在其中创建两个sets,例如set1set2

  

删除总和为另一个数组中元素的对

为此,您需要遍历arr1中所有可能的元素对,并检查此对的总和是否存在于set2中。同样也适用于arr2并在必要时删除元素。

这可以在O(n 2 )中完成。如果你不想创建额外的集合,你可以随时交换内存的性能,只需循环遍历arr1对并通过执行二进制文件检查arr2中的总和搜索。 然后时间复杂度可能达到O(n 2 log(n))。