给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
代码结果。我这个貌似很多解答里面都没有,可能我这个办法比较少??
哈希+暴力寻找
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize) {
// 根据numsSize合理分配arr大小,这里多分配1位方便对应1到numsSize的范围
int* arr = (int*)malloc((numsSize + 1) * sizeof(int));
int *res = (int*)malloc(sizeof(int) * numsSize);
int i = 0;
// 先初始化arr数组元素为0
for (i = 0; i <= numsSize; i++) {
arr[i] = 0;
}
// 标记出现过的数字,对应下标位置计数加1
for (i = 0; i < numsSize; i++) {
arr[nums[i]]++;
}
int index = 0;
// 遍历 [1, numsSize] 范围,找出计数为0的,也就是没出现过的数字
for (i = 1; i <= numsSize; i++) {
if (arr[i] == 0) {
res[index++] = i;
}
}
free(arr); // 释放为arr动态分配的内存
*returnSize = index;
return res;
}
评论 (0)