137 Single Number II 数组中除了一个数外,其他的数都出现了三次,找出这个只出现一次的数

给定一个整型数组,除了一个元素只出现一次外,其余每个元素都出现了三次。求出那个只出现一次的数。
注意:
你的算法应该具有线性的时间复杂度。你能否不使用额外的内存来实现?
详见:https://leetcode.com/problems/single-number-ii/description/

Java实现:

建立一个32位的数组,来统计每一位上1出现的个数,如果某一位上为1的话,那么如果该整数出现了三次,对3去余为0,把每个数的对应位都加起来对3取余,最终剩下来的那个数就是单独的数字。

参考:https://www.cnblogs.com/springfor/p/3870863.html

https://www.cnblogs.com/grandyang/p/4263927.html

class Solution {
    public int singleNumber(int[] nums) {
        int res=0;
        for(int i=0;i<32;++i){
            int sum=0;
            for(int j=0;j<nums.length;++j){
                sum+=(nums[j]>>i)&1;
            }
            res+=(sum%3)<<i;
        }
        return res;
    }
}

 

posted on 2018-04-05 22:46  lina2014  阅读(252)  评论(0编辑  收藏  举报

导航