文章目录
前言
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果
来源:力扣(LeetCode)
一、例子
示例:
二、思路与代码
1.思路
根据题意,设立两个指针,一个是答案数组arr,用作返回;另外一个数组是flag_arr记录原数组出现过数字对应的位置就+1,如果那个数组一直没出现过,就一直是0.比如说,原数组出现了数字7,那么在flag_arr[6]就+1
2.代码
代码如下(示例):
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){
if(1 == numsSize) {
return NULL;
}
int i, j;
*returnSize = 0;
int* flag_arr = (int*)malloc(sizeof(int) * (numsSize + 1) );
int* arr = (int*)malloc(sizeof(int) * (numsSize + 1) );
//如果找到相应的数,那个位置就+1,未出现的数就一直是0
memset(flag_arr, 0, sizeof(int) * (numsSize + 1) );
memset(arr, 0, sizeof(int) * (numsSize + 1) );
for(i = 0; i < numsSize; i++) {
flag_arr[nums[i] - 1]++;
}
for(j = 0, i = 0; i < numsSize; i++) {
if(0 == flag_arr[i]) {
arr[j] = i + 1;
++j;
}
}
*returnSize = j;
free(flag_arr);
return arr;
}
结果如图所示: