作者:修魔海的传说 | 来源:互联网 | 2023-06-20 19:48
文章目录前言一、例子二、思路与代码1.思路2.代码前言给你一个含n个整数的数组nums,其中nums[i]在区间[1,n]内。请你找出所有在[1,n]范围内但没有出
前言
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果
来源:力扣(LeetCode)
一、例子
示例:
二、思路与代码
1.思路
根据题意,设立两个指针,一个是答案数组arr,用作返回;另外一个数组是flag_arr记录原数组出现过数字对应的位置就+1,如果那个数组一直没出现过,就一直是0.比如说,原数组出现了数字7,那么在flag_arr[6]就+1
2.代码
代码如下(示例):
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) );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;
}
结果如图所示: