【LeetCode刷题】只出现一次的数字:妙解

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

   

经典的位运算

这道题目已经广为流传了,扫描数组,使用异或运算,最终的结果即是答案。

至于为什么异或运算是题解,首先需要了解以下几点:

   

什么是异或运算(xor)1 xor 1 = 0, 0 xor 0 = 0, 1 xor 0 = 1, 0 xor 1 = 1

知道了什么是异或运算之后,就可以得出任意数字异或其自身等于0的结论。比如数字5,其二进制是101,那么就有101 xor 101 = 0

知道了什么是异或运算之后,就可以得出任意数字异或0等于其本身的结论。

位运算与顺序无关,即a xor b = b xor a, a xor b xor a = a xor a xor b = b

因此,对于数组内只有一个数字出现了奇数次,其余数字都是出现偶数次的情况,异或运算刚好完美解决这个问题。

   

class Solution {

public:

int singleNumber(vector<int>& nums) {

int num = 0;

for (vector<int>::size_type i = 0; i < nums.size(); ++i)

num ^= nums[i];

return num;

}

};

   

作者:ronhou

链接:https://leetcode-cn.com/problems/single-number/solution/q136-single-number-by-ronhou/

来源:力扣(LeetCode

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

posted @ 2019-11-14 15:57  拓海藤原  阅读(192)  评论(0编辑  收藏  举报