0
点赞
收藏
分享

微信扫一扫

力扣每日一题——找到所有数组中消失的数字

small_Sun 2022-01-20 阅读 50

文章目录


前言

给你一个含 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;
}

结果如图所示:
在这里插入图片描述


举报

相关推荐

0 条评论