leetcode--面试题 17.04. 消失的数字

###Leetcode–面试题 17.04. 消失的数字
##题目
数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?

注意:本题相对书上原题稍作改动

示例 1:

输入:[3,0,1]
输出:2

示例 2:

输入:[9,6,4,2,3,5,7,0,1]
输出:8

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/missing-number-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

##题目分析
1.Leetcode上面的题都是接口型,不需要我们写头文件,主函数,只需要完成函数就可以
2.这道题的难度被划为简单类型。但因为它规定了时间复杂度为O(n) 还是有点难度的。
3.如果没有规定时间复杂度是有很多种方法来解决的。
4.规定时间复杂度之后,有两种方法来搞。一是求和,这种可能会导致溢出等问题,暂且不说。二是使用异或的方法。
5.异或的一些规则:0与任何数异或都等于任何数。两个相同的数异或等于0。这道题我们就用到了这两个规则。

##AC

int missingNumber(int* nums, int numsSize)
{
//如例1,数组有 3 0 1  从0-3,共有 0 1 2 3四个数,题目要求就是找从0-N中缺失的那个数。例1里就是2.
//x=0是因为0与任何数异或都等于那个数。
//i是从0道numsSize-1;
    int x=0;
    for(int i=0;i<numsSize;i++)
    {
        x=x^nums[i];
        x=x^i;
        //数组nums里 存在的数 和 i 异或之后,nums数组里的数就会变成0.
        //只有数组中缺失的那个数还存在。
    }
    return x^numsSize;
    //这里返回x异或numsSize是因为numsSize 那个数 没有被异或成0;
}

你可能感兴趣的:(leetcode--面试题 17.04. 消失的数字)