您的位置:首页 > 其它

【leetcode】268. Missing Number

2016-04-21 11:09 375 查看
题目:

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?

翻译:

数组nums中的数字的取值是0-n,且都不重复,只是从中去掉了一个数字,本题的任务是要找出这个缺失的数。且最好只能用一个额外的空间。

思路:

本题的思路有很多种,其他好想的我就不说了,我就说说用位的异或操作来实现的做法,这个做法我觉得网上大部分博客说的不太清楚。首先我们知道:

1.A^0=A

2.异或操作是满足交换律,结合律。

首先我们令result=0^1^...^n,然后我们对整个数组进行遍历,令result=result^nums[i],那么根据结合律和交换律,我们相当于进行了这样的操作(假设确实的数是i):(0^0)^(1^1)...((i-1)^(i-1))^(i)^((i+1)^(i+1))...(n^n),那么最后的结果就是缺失的数i。

代码:
class Solution {
public:
int missingNumber(vector<int>& nums) {
int result = nums.size();
int i=0;

for(int num=0;num<nums.size();num++){
result ^= nums[num];
result ^= i;
i++;
}

return result;
}
};
结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode