我需要比较两个不同大小的int数组。
必须最有效率。
是否可以在O(N * log(N))时间内完成?
它应该打印两个数组之间不同的整数。
答案 0 :(得分:1)
算法为O(n),但您假设数组的大小相同,且每个数组的大小为ARY_SIZE
。
我不会为您解决整个作业,但我建议您从以下函数标题开始:int compar2arr(int arrA[], int arrA_size, int arrB[], int arrB_size)
。
请注意,对于函数参数int arrA[]
仅等同于int* arrA
。
正如Keith和Sebastian所指出的那样,arrA_size != arrB_size
意味着不同(除非任务的作者以其他方式定义它)。所以你在开始时检查它并返回false
如果它成立。
修改强>
好的,我重新阅读你的帖子,看来你需要只显示所有不相等的元素,而你不知道如何处理它们的大小不同的事实。
因此我建议从以下开始:
int compar2arr(int arrA[], int arrA_size, int arrB[], int arrB_size)
{
int smaller_size = // arrA_size or arrB size, the smaller one;
int higher_size = // arrA_size or arrB size, the higher one;
int *bigger_array;
int i;
int result = true;
if (arrA_size > arrB_size)
bigger_array = arrA;
else
bigger_array = arrB;
for (i = 0; i < smaller_size; i++)
{
if (/* i-th elements are not(!!) equal */)
{
result = false;
// print the values to be different
}
}
if (smaller_size != higher_size)
result = false;
for (i = smaller_size; i < higher_size; i++)
{
// print bigger_array[i]
}
return result;
}
我相信你可以拿出实际的代码来替换评论。 这不是最简洁的写作方式,但希望让它易于理解。无论如何,计算复杂度是O(n),最好的。
答案 1 :(得分:1)
如果两个数组的大小不同,那么它们已经不同了,不需要比较内容,只需要大小。
答案 2 :(得分:1)
如果您只需要打印不同的元素,则在0(n)时间内无法打印。解决问题的最佳方法是对两个数组进行排序(使用qsort),然后从零循环到两个数组中较小的数组。
此外,如果您尝试打印所有不匹配的整数,则在到达第一个不同的整数时无法中断。您想要做的是每次找到不匹配的元素时打印出“%d与索引%d处的%d不匹配”或类似的东西。
最后,如果大小不相等,我会遍历较长数组的最后一部分并打印出额外的元素。