文章目录
前言
给你一个含 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;
}
 
结果如图所示:
 









