转载自:http://blog.youkuaiyun.com/dgq8211/article/details/7455722
题目链接:Click here~~
题意:
给你n个数字,已知只有一个数字出现了奇数次,其他数字都出现了偶数次,要求你找出这个特别的数字。
解题思路:
题目内存限制:1024K,所以不能简单地用数组存然后再处理。
为了节约内存,可以用STL里面的set,map等容器。
当容器里没有这个元素的时候,就插入这个元素,否则,删除这个元素。
最后,容器中肯定只剩下一个元素,便是我们所要的结果。
其实,这题还有个更好的方法————位异或。
我们先了解一下位异或的运算法则吧:
1、a^b = b^a。
2、(a^b)^c = a^(b^c)。
3、a^b^a = b。
对于一个任意一个数n,它有几个特殊的性质:
1、0^n = n。
2、n^n = 0。
所以可以通过每次异或运算,最后剩下的值就是出现奇数次的那个数字。
PS:话说通过位运算的这些性质,可以通过不借用中间变量实现a,b的值的交换。

本文介绍了一种在一组数字中找到唯一出现奇数次的数字的方法。利用STL容器如set进行存储和处理,以及更高效的位异或操作来解决此问题。
448

被折叠的 条评论
为什么被折叠?



