137. Single Number II

来源:互联网 发布:易语言编程有哪些书 编辑:程序博客网 时间:2024/06/05 07:08

137. Single Number II

题目

给出一个整数数组,除了其中一个只出现一次,其他每一个元素都出现3次。找出那个出现一次的元素。

注意:
你的算法需要有线性时间复杂度。能不用额外空间来实现吗?

代码块

class Solution {    public int singleNumber(int[] nums) {        int rst = 0;        for(int i = 0; i < 32; i++){            int count = 0;            for(int j = 0; j < nums.length; j++){                if(((nums[j] >> i) & 1) == 1){//统计第i位有几个1                    count ++;                    count = count % 3;                }            }            if(count != 0){                rst |= (count << i);            }        }        return rst;    }   public static void main(String[] args) {        int[] nums = {1,1,1,2,2,2,3};        System.out.println(singleNumber(nums));    }}

代码分析

按位运算。每一位都是0或1,将每个元素的每一位都进行相加,然后模3,得到的余数就是单数的相应位。
然后再用十进制表示出来。
根据别的解析来看:第i个位置上所有数字的和对3取余,那么只会有两个结果 0 或 1 (根据题意,3个0或3个1相加余数都为0)。 因此取余的结果就是那个 “Single Number”。最直接的方法就是用大小为 32的数组来记录所有位上的和。
参考:
1.http://blog.csdn.net/derrantcm/article/details/47745445
2.以及相关的位运算。

原创粉丝点击