0
点赞
收藏
分享

微信扫一扫

算法题每日一练---第54天:丢失的数字

一、问题描述

给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。

题目链接:丢失的数字。

二、题目要求

样例

输入: nums = [9,6,4,2,3,5,7,0,1]
输出: 8
解释: n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。
       8 是丢失的数字,因为它没有出现在 nums 中。

考察

1.位运算、异或问题
2.建议用时10~30min

三、问题分析

本题是位运算的第9题,没了解过位运算相关知识点可以看这一篇文章,讲解比较详细:

算法题每日一练---第45天:位运算。

这一题要注意题目中的数组元素都是个不相同的,我们要找出0~n这一列数字中数组不包含的数字,以样例的数组为例,排序后结果如下:

0 1 2 3 4 5 6 7   9
0 1 2 3 4 5 6 7 8 9

既然是位运算的题目,肯定要用到位运算的相关知识点,这一题假如将上面两行的数字进行异或运算,那么相同的数字就会消掉,而留下的不就是丢失的数字吗?

符号:^

运算规则:两个二进制位相反为1,相同为0

示例:1001^0111=1110

四、编码实现

```c++
class Solution {
public:
int missingNumber(vector<int>& nums) {
int i,n=nums.size(),ans=0;//数字初始化
for(i=0;i<n;i++)//for循环判断
{
ans=ans^i^nums[i];//逐位异或计算
}
return ans^n;//输出结果

}

};


## 五、测试结果

![1.png](https://s4.51cto.com/images/blog/202205/20214516_62879b6c648dc37218.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

![2.png](https://s4.51cto.com/images/blog/202205/20214516_62879b6c7660e84846.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
举报

相关推荐

0 条评论