4.力扣刷题之消失的数字
来源:华佗健康网
题目:
思路
思路一:遍历数组nums,将数组中的元素加入到哈希集合中,然后依次从0到n检查是否在哈希集合中,如果不在则是我们要找的数字。
思路二:数组nums中有n个数,在这n个数的后面添加从0到n的每个整数,则添加了n+1个整数,共有2n+1个整数。在2n+1个整数中,消失的数字只在后面n+1个整数中出现一次,其余的数字在前面n个整数中和后面n+1个整数中各出现一次,即其余的数字都出现了两次。
根据出现的次数的奇偶性,可以使用按位异或运算得到消失的数字。按位异或运算满足交换律和结合律,且对任意整数x都满足x^x=0和x^0=x;
解题
class Solution {
public:
int missingNumber(vector<int>& nums) {
//1.哈希表
unordered_set<int> set;
int n=nums.size();//数组的大小
for(int i=0;i<n;i++)
{
//将数组放入哈希集合中
set.insert(nums[i]);
}
int miss=-1;
for(int i=0;i<=n;i++)
{
//遍历查看有哪个数是哈希集合中没有的
if(!set.count(i))
{
miss=i;
break;
}
}
return miss;
}
};
class Solution {
public:
int missingNumber(vector<int>& nums) {
//2.异或
int x=0;
for(int i=0;i<nums.size();i++)
{
x^=nums[i];
}
for(int i=0;i<=nums.size();i++)
{
x^=i;
}
return x;
}
};
因篇幅问题不能全部显示,请点此查看更多更全内容