[题目链接](面试题 17.04. 消失的数字 - 力扣(LeetCode))
思路1:遍历数组中的和,计为sum1,用sum=0+1……+n; p=sum-sum1,即丢失的数字为p的值
int missingNumber(int* nums, int numsSize){
int sum=0;
for(int i=0;i<=numsSize;i++){
sum+=i;
}
int sum1=0;
for(int i=0;i<numsSize;i++){
sum1+=nums[i];
}
return sum-sum1;
}
思路2:利用桶排序
int missingNumber(int* nums, int numsSize){
int a[100000]={0}; //将数组a全都初始化为0
for(int i=0;i<numsSize;i++){
a[nums[i]]=1; //数组nums出现的数字在对应的桶里标记为1(即数组a)
}
int temp;
for(int i=0;i<=numsSize;i++){
if(a[i]==0){
temp=i;
break;
}
}
return temp;
}
思路3:异或的办法(这个方法是从其他视频里学来的,分享一下)异或的特点:同0异1, 所以,给一个值x=0,x先跟[0,n]的所有值异或,x再跟数组中的每个异或,最后x即缺失的数字(时间复杂度为O(N))
int missingNumber(int* nums, int numsSize){
int x=0;
for(int i=0;i<=numsSize;i++){
x^=i;
}
for(int i=0;i<numsSize;i++){
x^=nums[i];
}
return x;
}