目录
题目:
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
基础知识补充:
题目要求的int* returnSize是控制检测数组中的数据
笔者个人习惯会先malloc数组 进而*returnSize初始化为0 符合条件的元素加入数组时 *returnSize也会随之++
思路:
先检索数组中含有的元素 再按题目要求把没有的元素存放到数组中
下文代码选择了加数的方式 也可以使用替代的方法(本质上也是替换)
进而将没有加数的元素所占的位置应该有的元素加入了返回数组
最终代码:
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize) {
int i = 0;
int j = 0;
*returnSize = 0;
int* arr = (int*)malloc(sizeof(int) * numsSize);
for (i = 0; i < numsSize; i++)
{
j = (nums[i] - 1) % numsSize;//没有的元素下标不会变动
nums[j] += numsSize; //这样设置 加数的数字就包含了数组内所有的元素
}
for (i = 0; i < numsSize; i++)
{
if (nums[i] <= numsSize)
arr[(*returnSize)++] = i + 1;
}
return arr;
}