题意是给出一个数组,0,1,2,3,4,5……这种,找出里面消失的那个数
一开始想那就for循环一遍,看nums[i]+1!=nums[i+1]那就说明少数了呗 ,后来发现这个是乱序的
要在线性时间里完成,那就新建一个数组a把他们重新排好序,正好从0开始,就是数组的下标,a[i]!=i的就是missing number
多次调试,
input[0]
expect[1]
input[1]
expect[0]
input[1,2]
expect[0]
input[0,1,2]
expect[3]
还要考虑a数组比nums数组应该多一个值,以及因为初始化a时都定为0,如果原来的数组没有0,那就找不到missing number,所以要用flag看一下nums里有没有0
int missingNumber(int* nums, int numsSize) {
int i=0;
int *a;
int result=0;
int flag=0;
a=(int *)malloc((1+numsSize)*sizeof(int));
for(i=0;i<numsSize+1;i++){
a[i]=0;
}
if(numsSize==1){
if(nums[0]==0){
result=1;
}else{
result=0;
}
}else{
for(i=0;i<numsSize;i++){
//a[nums[i]]=nums[i];
if(nums[i]==0){
flag=1;
}
}
if(flag==1){
for(i=0;i<numsSize;i++){
a[nums[i]]=nums[i];
}
for(i=0;i<numsSize+1;i++){
if(a[i]!=i){
result=i;
break;
}else if((a[i]==i)&&(i==numsSize)){
result=a[i]+1;
}
}
}else{
result=0;
}
}
return result;
}