Leetcode:【448. 找到所有数组中消失的数字】题解

题目

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。

难度:简单

题目链接:448. 找到所有数组中消失的数字

示例1

复制代码
输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]

示例2

复制代码
输入:nums = [1,1]
输出:[2]

解题思路:

题目意思是再在有 n 个元素的数组中,找出1,n中没有出现的数组,其中 n 个元素中,可能会出现重复的元素,于是 我们就可以 再次创建一个临时数组tmp(每个元素置0),存放相应的元素来取消重复的元素。然后遍历整个数组,如果元素为零,则为没有出现在nums中的数字。

代码展示

cpp 复制代码
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
 
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){
    int *arr = (int*)malloc(sizeof(int)*numsSize);//用于返回的数组
    int tmp[100000] = {0};
    int i = 0;
    int x = 0;
    for(i = 0;i<=numsSize;i++)
    {
        tmp[i] = 0;
    }
    for(i = 0;i<numsSize;i++)
    {
        x = nums[i]%(numsSize+1);
        tmp[x-1] = x;
    }
    i = 1;
    int count  = 0;//记录返回数组的大小
    int j = 0;
    for(i = 1;i<=numsSize;i++)
    {
        if(tmp[i-1] == 0)
        {
            arr[j++] = i;
            count++;
        }
    }
    *returnSize = count;
    return arr;
}

【解析】

这里的arr数组用于返回数组,tmp 临时数组主要用来消除重复的元素,主要思路

通过对循环每一个数组元素,对其进行取模运算,再将其放入对应的下标的数组中

但是前提是 要对 tmp数组每一个元素置0

放入对应的下标的数组中后,

++开始遍历数组,找出1,n 中没有出现在nums数组中的数字++

cpp 复制代码
    for(i = 1;i<=numsSize;i++)
    {
        if(tmp[i-1] == 0)
        {
            arr[j++] = i;
            count++;
        }
    }

接着就是返回 返回数组的大小和返回数组了。

cpp 复制代码
    *returnSize = count;
    return arr;
相关推荐
是隼人4 小时前
buuctf-pwn PWN4(双引号的转义缺陷)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
码行山野赴时序归途4 小时前
C 语言文件操作完全指南:从打开到关闭
c语言·开发语言
张欣-男4 小时前
3分钟理解线性代数
线性代数·算法
白狐_7984 小时前
408 数据结构|外部排序优化:怎么减少时间开销
数据结构·算法
小白说大模型4 小时前
Hermes 全配置指南:从裸版到 AI Agent 天花板
大数据·人工智能·学习·算法·机器学习·数据挖掘
a187927218315 小时前
【算法】动态规划入门:从打家劫舍到状态设计的三堂课
算法·leetcode·动态规划·dp·回溯·暴力
淡海水14 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
leobertlan14 小时前
好玩系列:训练一个神经网络模型指导小孩玩游戏2-大局观教练
算法
CS_Zero15 小时前
C语言sizeof是函数吗?
c语言·开发语言
Tisfy15 小时前
LeetCode 3876.构造奇偶一致的数组 II:三种情况分类讨论(其实还是脑筋急转弯)
算法·leetcode·题解·脑筋急转弯