声明:原题目转载自LeetCode,解答部分为原创
Problem :
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n
, find the one that is missing from the array.
For example,
Given nums = [0, 1, 3]
return 2
.
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
Solution :
思路:二进制数字处理典型例子之一,先确定一个二进制数value,通过跟每一位小于或等于value的二进制数bit_num按位异或,逻辑上相当于排除数组[0, 1, 2, 3, 4, ..., value]中 bit_num 的位置,与value个二进制数按位异或的结果相当于数组中剩余的值。
代码如下:
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int missingNumber(vector<int>& nums) {
int miss = nums.size();
for(int i = 0; i < nums.size(); i++){
miss = miss ^ i ^ nums[i];
}
return miss;
}
};
int main()
{
Solution text;
vector<int> nums;
nums.push_back(0);
nums.push_back(1);
nums.push_back(3);
cout << text.missingNumber(nums) << endl;
return 0;
}