Single Number II

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?

 

题意就是,给定一个数组,除了一个元素只出现一次,其他的元素全部出现三次,这个题是在另外一个题的基础上改的,另外一个题是其他元素出现2次,那么用异或操作即可。

如果不用map或set来做,那么只能通过对数字进行操作。

这个题目,既然给定了integer,那么还是利用位操作的思想,把每一位的值(0或1)加起来,对每一位对3取模,余下的就是只出现一次的数。

Talk is cheap>>

   public int singleNumber(int[] A) {
        int[] res = new int[32];
        for (int i = 0; i < 32; i++) {
            for (int j = 0; j < A.length; j++) {
                res[i] += A[j]>>i & 1 ;
            }
            res[i] %= 3;
        }
        int ret = 0;
        for (int i = 0; i < 32; i++) {
            ret |= res[i] << i;
        }
        return ret;
    }

 

posted @ 2015-03-28 15:05  丶Blank  阅读(134)  评论(0编辑  收藏  举报