实现两个阵列比较的最佳逻辑



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

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

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

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

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

要删除公共元素:

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

删除与另一个数组中的元素相加的对

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

这可以在 O(n2) 中完成。如果您不想创建额外的集合,您可以随时以性能换取内存,只需循环遍历arr1对并通过执行二叉搜索来检查arr2中的总和。 那么时间复杂度可能会飙升到 O(n2log(n))。

相关内容

  • 没有找到相关文章

最新更新