给定一个长度为N的正整数数组nums,其中nums[i]的值都在区间[1,n]中,请你找出nums数组在[1,n]范围里面没有出现过的数字,并将它们放在数组里面返回(在数组里面的顺序可以不唯一)
注:本题有时间复杂度为O(n),空间复杂度为O(1)的解法,返回的数组不计入空间复杂度计算
数据范围:
[2,1,4,5,1,2]
[3,6]
数组长度为6,那么范围为[1,6],其中3和6没有在数组里面出现,返回[3,6]
[1,1]
[2]
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param numsLen int nums数组长度 * @return int整型一维数组 * @return int* returnSize 返回数组行数 */ int* findDisappearedNumbers(int* nums, int numsLen, int* returnSize ) { // write code here int *hash=(int *)calloc(numsLen,sizeof(int)); int *ans=(int *)malloc(numsLen*sizeof(int)); for(int i=0;i<numsLen;i++){ hash[nums[i]-1]=1; } int count=0; for(int j=0;j<numsLen;j++){ if(hash[j]==0){ ans[count++]=j+1; } } *returnSize=count; return ans; }