一、问题描述
给定一个包含 [0, n]
中 n
个数的数组 nums
,找出 [0, n]
这个范围内没有出现在数组中的那个数。
题目链接:丢失的数字
二、题目要求
样例
输入:nums= [9,6,4,2,3,5,7,0,1] 输出:8解释:n=9,因为有9个数字,所以所有的数字都在范围 [0,9] 内。8是丢失的数字,因为它没有出现在nums中。
考察
位运算、异或问题 建议用时10~30min
三、问题分析
本题是位运算的第9题,没了解过位运算相关知识点可以看这一篇文章,讲解比较详细:
这一题要注意题目中的数组元素都是个不相同的,我们要找出0~n这一列数字中数组不包含的数字,以样例的数组为例,排序后结果如下:
0123456790123456789
既然是位运算的题目,肯定要用到位运算的相关知识点,这一题假如将上面两行的数字进行异或运算,那么相同的数字就会消掉,而留下的不就是丢失的数字吗?
符号:^
运算规则:两个二进制位相反为1,相同为0
示例:1001^0111=1110
四、编码实现
classSolution { public: intmissingNumber(vector<int>&nums) { inti,n=nums.size(),ans=0;//数字初始化for(i=0;i<n;i++)//for循环判断 { ans=ans^i^nums[i];//逐位异或计算 } returnans^n;//输出结果 } };