题目描述
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
问题分析
因为确定了nums[i]在区间[1,n]范围内,我们可以用一个数组记录下其中每个元素是否出现,这样就能得到一个结果,然后将每出现的数字组成一个新的数组返回就行了。
代码
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize) {
int count = numsSize;
int *nums2 = (int *)malloc(sizeof(int)*(numsSize+1));
for(int i = 0; i<=numsSize; i++){
nums2[i] = 0;
}
for(int i=0; i<numsSize;i++){
if(nums2[nums[i]]==0){
nums2[nums[i]] = 1;
count--;
}
}
int *answer = (int *)malloc(sizeof(int)*count);
count = 0;
for(int i=1; i<=numsSize; i++){
if(nums2[i]==0){
answer[count++] = i;
}
}
*returnSize = count;
return answer;
}