一,题目描述
二.题目分析
三.解题思路
1.利用排序思想,排完序之后一个个找
代码实现
int missingNumber(int* nums, int numsSize)
{
int i=0;
int j=0;
int flag=-1;
//利用冒泡排序思想进行排序
for(i=0;i<numsSize-1;i++)
{
for(j=0;j<numsSize-1-i;j++)
{
if(nums[j]>nums[j+1])
{
int tmp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=tmp;
}
}
}
//一个个查找
for(i=0;i<numsSize;i++)//若写成等于,数组就会越界
{
if(i!=nums[i])
{
flag=i;
break;
}
}
//特殊情况,查找都数字为最后一个数字
if(i==numsSize)
{
flag = i;
}
return i;
}
通过分析,时间复杂度为O(n^2),不符合题目要求
2.前numsSize个数字相加,之后减去nums数组中的值,就是所要找到值 因为题目描述数组从零开始
代码实现
int missingNumber(int* nums, int numsSize)
{
int i=0;
int sum=0;
//前numsSize个数字相加
for(i=0;i<=numsSize;i++)
{
sum+=i;
}
//减去nums数组中的值
for(i=0;i<numsSize;i++)
{
sum-=nums[i];
}
return sum;
}
2.利用异或操作符
首先讲解一下这个操作符(^):
这个操作符是对二进制来用的,相同为零相异为一
这个操作符有几个特点
1.任何数据与零异或都为本身
2.一个数据本身与自己异或,结果为零
3.满足交换律,比如:(a^b) ^ c =a^(b^c)
思路:用零先跟0-numsSize中数据异或,在跟nums数组中数据异或,最后的值就是所要找的值
代码实现
int missingNumber(int* nums, int numsSize)
{
int x=0;
int i=0;
//先跟0-numsSize中数据异或
for(i=0;i<=numsSize;i++)
{
x=x^i;
}
//跟nums数组中数据异或
for(i=0;i<numsSize;i++)
{
x=x^nums[i];
}
return x;
}
一定要控制好下标
以上代码仅供参考 如有错误请大家指点 我会尽快去改正 欢迎大家来评论~~~