比较两个整数数组并检查它们是否具有相等的值

Compare two integer arrays and check if they have equal values

本文关键字:是否 检查 两个 数组 整数 比较      更新时间:2023-10-16

我想知道比较两个未排序数组的最佳方法是什么,并使用C++检查它们是否具有相等的值?我在O(nlogn)中找到了一个解,但有O(n)解吗?如何,如果是的话?

请让我告诉你,这不是一个大学的问题,我想知道ACM的问题解决。

谢谢。

这取决于您的价值观以及您愿意为此花费多少内存。在包含唯一整数x的数组的O(n)解决方案中,x在0<=x<c、 您可以使用一个辅助数组char count[c],并执行类似的操作:

int array1[N];
int array2[N];
//get the values into array1 and 2 from somehwere
char count[c]{0};
for(size_t i=0; i<N; i++) {
    count[array1[i]]++;
    count[array2[i]]++;
}

现在,当且仅当count的所有元素都是0或2时,两个数组将相等。这可以通过再次运行相同的循环在O(n)中进行检查,只是这一次,count[array1[i]](对于array2也是如此)被检查为等于2。同样的技术可以适用于其他一些场景:例如,如果值是非唯一的,则必须在两个单独的数组中进行计数,然后检查这两个计数是否相等。但是,如果可能的值的数量太大,则必须将信息("x包含在数组中")存储在不同的结构中,如树中的操作在O(n log n)中,这样您就回到了起点。