<分区>
我在 C 中有两个整数数组,我想比较它们。这是我一起破解的非常快的东西,但我想知道是否有更快的方法。
1) 找到一个不在我们正在比较的数组 (arr2) 中的整数。
2) 复制原始数组 (arr2)。
3) 遍历第一个数组 (arr1),如果在复制的数组中找到该元素,我们将那个索引处的值替换为我们知道不在原始数组中的值(这是为了防止多个时短路相同的值在数组中)。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <random.h>
bool isin(int arr[], int elem, size_t len, size_t *index) {
int i;
for (i = 0; i < len; ++i) {
if (arr[i] == elem) {
if(index != NULL)
*index = i;
return true;
}
}
return false;
}
int notInArray(int arr[], size_t len) {
int r;
do {
r = rand();
} while (isin(arr, r, len, NULL));
return r;
}
bool arraysEqual(int arr1[], int arr2[], size_t len) {
size_t i, j, index;
int notInArr2 = notInArray(arr2, len);
int *arr = (int*)malloc(len * sizeof(int));
for (i = 0; i < len; ++i)
arr[i] = arr2[i]; /*copy arr2 to arr*/
for (i = 0; i < len; ++i) {
if (isin(arr, arr1[i], len, &index))
arr[index] = notInArr2; /*replace that elemnt with something that we know is not in the original array*/
else
return free(arr), false;
}
free(arr);
return true;
}
int main() {
srand(time(NULL));
int a[] = { 3, 9, 1, 3, 8 };
int b[] = { 1, 8, 3, 3, 9 };
printf("%i\n", arraysEqual(a, b, sizeof(a) / sizeof(int)));
system("pause");
}
我不一定要寻找源代码,但更多的是关于如何实现它的一般想法。