赞
踩
题目
给你一个含
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中的数字。
代码展示
- /**
- * 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数组中的数字
- for(i = 1;i<=numsSize;i++)
- {
- if(tmp[i-1] == 0)
- {
- arr[j++] = i;
- count++;
- }
- }
接着就是返回 返回数组的大小和返回数组了。
- *returnSize = count;
- return arr;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。