我编写了用于在数组中查找重复项的函数,没有问题地通过了两个测试用例,但在一个测试用例中,我不明白它如何访问数组中的值。 ()()()
int compare(const void * x1, const void * x2){
return ( *(int*)x1 - *(int*)x2 );
}
int* findDuplicates(int* nums, int numsSize, int* returnSize) {
int *p = (int*) malloc(numsSize * sizeof(int));
if(numsSize == 1){
*returnSize = 0;
return p;
}
qsort(nums, numsSize, sizeof(int), compare);
int k = 0;
for(int i = 0; i < numsSize; i++){
if(i == numsSize - 1){
break;
}
if(nums[i] != nums[i + 1]){
continue;
}
p[k] = nums[i];
++k;
*returnSize +=1;
}
return p;
}
我可以通过XOR解决它,但我只是想知道为什么它会获取第二个测试用例中的数据,而且我不明白他是如何获取的。
您没有初始化计数器变量。
*returnSize +=1;
如果调用者在调用您之前没有初始化为 0(并且您永远不应该依赖调用者!),您将从不确定的值开始,这会导致未定义的行为。
除此之外,您还应该调整分配的内存大小。您为太多条目分配了内存。 最多可以有
numsSize/2
个重复项。
知道正确的重复次数后,您可以使用 realloc
来缩小数组。