码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode]Single Number II

时间:2015-04-05 14:42:18      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:位运算

Given an array of integers, every element appears three times except for one. Find that single one.

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

偷偷地看了一下tag,是位操作,之前也做过这样的题目,感觉对这方面不是很熟悉,想不出来=.=
看了网上的解题思路之后才会。再记录一下思路:题目的的意思是所有数字都出现三次,只有一个数字出现一次(只出现一次而不是两次)。因为int型数字可以使用32位二进制数表示,所以使用一个bit数组记录这些数字(二进制)每一位的数字出现1的个数。如果1出现的次数不是3的整数倍(模三余一)则就是那个数字。

不是3,应用到k也是成立的。将模三改为模k就可以了。

class Solution {
public:
    int singleNumber(int A[], int n) {
        if(A==NULL||n==0) return 0;
        int ans = 0,i,j;
        int bit[32] = {0};
        for(i=0;i<32;i++){
            for(j=0;j<n;j++)
                bit[i] += (A[j]>>i)&1;
            }
            //按位构造答案
            ans |= (bit[i]%3)<<i;
        }
        return ans;
    }
};

[leetcode]Single Number II

标签:位运算

原文地址:http://blog.csdn.net/iboxty/article/details/44886473

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!