题目描述
解题思路1另开辟一个数组,重新开辟的数组长度比原来的大一。里面的元素都初始化为-1,原数组里面的元素对应从新开辟数组的下标
代码
int missingNumber(int* nums, int numsSize){ int* num=(int*)malloc((numsSize+1)*sizeof(int)); int i=0; for(i=0;i<numsSize+1;i++) { num[i]=-1; } for(i=0;i<numsSize;i++) { num[nums[i]]=nums[i]; } for(i=0;i<numsSize+1;i++) { if(num[i]==-1) break; } free(num); num=NULL; return i; }
解题思路2
- 用数字0把数组里面的元素全部异或
^
,同时和0—N
(N为原数组长度)的数字再次进行异或,结果就是缺少的数。
代码
int missingNumber(int* nums, int numsSize){ int i=0,x=0; for(i=0;i<numsSize;i++) { x^=nums[i]; x^=i; } return x^numsSize; }
解题思路3
- 把
0到n
的数全部进行相加,然后减去数组里面的数 - 虽然可以通过,但是数组长度过大时,会有越界的风险
代码
int missingNumber(int* nums, int numsSize){ int i=0,x=0; for(i=0;i<numsSize;i++) { x+=i; x-=nums[i]; } return x+numsSize; }