题目
题目描述
从0,1,2,…,n这n+1个数中选择n个数,组成有序数组,请找出缺失的那个数,要求O(n)尽可能小。
解析
异或大法。
只需要知道一些异或的性质
- 异或后为0 仅当 两个数分别为0和1
- 自己异或自己结果为 0
class Solution {
public:
/**
* 找缺失数字
* @param a int整型一维数组 给定的数字串
* @param aLen int a数组长度
* @return int整型
*/
/*0 1 3
00^ 01^ 11
00^ 01^ 10^ 11 = 10*/
int solve(int* a, int aLen) {
// write code here
for(int i =0; i <=aLen; i++){
if((i^a[i]) != 0) return i;//自己和自己异或为 0
}
}
};
其实这题本身数组有序的话,二分也不失为一个好选择。
异或还能用在什么地方呢?
- 很多数据,只有一个出现了一次,其他都出现两次