137. 只出现一次的数字 II

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

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,3,2]
输出: 3

示例 2:

输入: [0,1,0,1,0,1,99]
输出: 99
解题思路——
1. 这里要用到位操作的概念,按位与操作&,按位或操作|,异或操作^.
2. 在你了解上面操作之后,明确一下下面算法的思路。这个数组有3*n + 1的数字,那么就把他们转化为长度为32位的2进制,就必然存在3*x的1,3*y的0,其中x + y = 32 * n.因为比如说n=1,就是数组有4个数字,那么有三个相同的数字,每个数字表示成2进制,就是相当于有3个32位的二进制数一样,而且每一位都是一样的。
哎哟,反正你这边理解就行了,要把这些数字都理解成是32位的2进制编码就行了。
3. 然后你相信,如果不看哪个特殊的数字,那么显然,1的总数量和0的总数量一定是3的倍数对不对?
4. 但是实际上,1和0的总数量不一定是3的倍数,为什么?就是因为那个特殊的不同的数字啊。
5. 好,如果我告诉你,32位的第5位,1的数量不是3的倍数,比如说1的数量是16,说明什么??没错,说明那个特殊数字的32位二进制表示的第5位是1.
6 按照这个思路,去理解代码吧。


class Solution {
public:
    int singleNumber(vector& nums) {
        int length = nums.size();
        int result = 0;
        for(int i=0;i<32;i++)
        {
            int mask = 1<


你可能感兴趣的:(LeetCode)