我有两个数组-arr 1和arr 2,这里两个数组都有一些常用项和许多不常见的项,首先应从两个数组中删除常用项。
因此,对于arr 1中的每个不常见项,可能是arr 2中两个或更多个值的总和,反之亦然。如果找到该值,则必须从相应的数组中移除这些值。最后,输出应该只是两个数组上不匹配的值我需要一个逻辑,我可以用更快的方式进行计算。
答案 0 :(得分:0)
我不会给出实现你逻辑的代码,但我很乐意指出你正确的方向。
我用C ++编写代码,所以我会回答这个问题。如果你想要一种不同的语言,我相信你可以自由地这样做。
删除常用元素:
首先对数组arr1
和arr2
进行排序。然后对它们进行set_symmetric_difference。这将有效地在线性时间内运行。然后在其中创建两个sets,例如set1
和set2
。
删除总和为另一个数组中元素的对
为此,您需要遍历arr1
中所有可能的元素对,并检查此对的总和是否存在于set2
中。同样也适用于arr2
并在必要时删除元素。
这可以在O(n 2 )中完成。如果你不想创建额外的集合,你可以随时交换内存的性能,只需循环遍历arr1
对并通过执行二进制文件检查arr2
中的总和搜索。
然后时间复杂度可能达到O(n 2 log(n))。