消失的数字

简介: 消失的数字

使用异或思想

空间复杂度:O(1)

时间复杂度:O(N)

1.0^x = x;

2.x^x = 0; 同样的数异或两次得到零

3.异或满足交换律

实现思路:

4. 先异或[0,n]的所有数字,再异或nums数字的所有数字:

5. 由于想同的数异或会得到0,并且0异或任意数结果都是任意数,

6. 所以再本题中,异或两次的会被变为0,异或一次的就不会发生变化:那么小时的数字就会出来了 比如:

输入:[3,0,2] :

先异或:0到n的所有数字:X^ 1 ^ 2^3;

再异或数组: X^ 1 ^ 2^ 3 ^ 3^ 0 ^ 2 = 0^ 1^ 2^ 2 ^3 ^3 = 1; 即1是消失的数字。

注:异或0-numsSize的所有数字时需要循环numsSize+1次,异或数组nums时只用循环numsSize次

int missingNumber(int* nums, int numsSize){
        //先异或0-numsSize的所有数字
        int x = 0;
        for(int i = 0 ;i<=numsSize;i++){
                x ^= i;
        }
        //再异或nums数组所有的值
        for(int i = 0;i <numsSize;i++){
            x ^= nums[i];
        }
        //最后的结果就是消失的数字
        return x;
}
相关文章
键盘数字区域不可用解决办法
目前归纳了两种场景以及对应的处理办法
906 0
键盘数字区域不可用解决办法
|
1月前
通过屏幕我们输入三个数字,并找出最大的数
【10月更文挑战第15天】通过屏幕我们输入三个数字,并找出最大的数。
26 2
|
4月前
|
C++ 索引
2269. 找到一个数字的 K 美丽值C++
2269. 找到一个数字的 K 美丽值C++
|
6月前
|
机器学习/深度学习
面试题 17.04. 消失的数字
面试题 17.04. 消失的数字
35 0
|
6月前
|
C语言
【05】消失的数字
【05】消失的数字
|
6月前
每日一题——找到消失的数字
每日一题——找到消失的数字
|
6月前
|
索引
leetcode-448:找到所有数组中消失的数字
leetcode-448:找到所有数组中消失的数字
35 0
448.找到所有数组中消失的数字
448.找到所有数组中消失的数字
448. 找到所有数组中消失的数字
448. 找到所有数组中消失的数字
79 0
448. 找到所有数组中消失的数字