1. 题⽬链接:268.丢失的数字
2. 题⽬描述:
3. 解法(位运算):
算法思路:
设数组的⼤⼩为n ,那么缺失之前的数就是[0, n] ,数组中是在[0, n] 中缺失⼀个数形成 的序列。 如果我们把数组中的所有数,以及[0, n] 中的所有数全部「异或」在⼀起,那么根据「异或」 运算的「消消乐」规律,最终的异或结果应该就是缺失的数~
C++算法代码:
class Solution
{
public:
int missingNumber(vector<int>& nums)
{
//此处为0不会改变异或的元素
int answer=0;
//数组内元素异或
for(auto x:nums)
{
answer^=x;
}
//范围内元素异或
for(int i=0;i<=nums.size();i++)
{
answer^=i;
}
return answer;
}
};
Java算法代码:
class Solution {
public int missingNumber(int[] nums) {
int ret = 0;
for (int x : nums) ret ^= x;
for (int i = 0; i <= nums.length; i++) ret ^= i;
return ret;
}
}