奇数个数里面找唯一一个不成对的数
思路:
异或!
a^b^a = b
证明:a^b^a = a^a^b = 0^b = b
solution 1
class Solution {
public:
int singleNumber(int A[], int n) {
int singleNum = 0;
for(int i=0;i<n;i++){
singleNum^=A[i];
}
return singleNum;
}
};
总结
如果是有两个single number, 要求通过两次扫描获得,这两个数
一次扫描: a^b
分析a,b必然有一位不同,比如 a^b = 0010 ,第二位不同,根据这个线索,相当于把所有的数字分成了两组,一组有a,一组有b,而且每一组都只有a或者b一个 single number。
二次扫描:if(each 属于 第一组) 进行异或, 得到c, c可能是a或者b。
于是: a,b 一个是 c,一个是a^b^c。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。