初学网站开发,上海市普陀区建设规划局网站,建设部规范网站,新乡网站建设哪家公司好题目 给你一个含 n 个整数的数组 nums #xff0c;其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字#xff0c;并以数组的形式返回结果。 难度#xff1a;简单 题目链接#xff1a;448. 找到所有数组中消失的数字 示例1
输入其中 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;inumsSize;i){tmp[i] 0;}for(i 0;inumsSize;i){x nums[i]%(numsSize1);tmp[x-1] x;}i 1;int count 0;//记录返回数组的大小int j 0;for(i 1;inumsSize;i){if(tmp[i-1] 0){arr[j] i;count;}}*returnSize count;return arr;
}
【解析】
这里的arr数组用于返回数组tmp 临时数组主要用来消除重复的元素主要思路 通过对循环每一个数组元素对其进行取模运算再将其放入对应的下标的数组中
但是前提是 要对 tmp数组每一个元素置0 放入对应的下标的数组中后 开始遍历数组找出[1,n] 中没有出现在nums数组中的数字 for(i 1;inumsSize;i){if(tmp[i-1] 0){arr[j] i;count;}}
接着就是返回 返回数组的大小和返回数组了。 *returnSize count;return arr;