• 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?

    Ref :http://fisherlei.blogspot.com/2013/11/leetcode-single-number-ii-solution.html

    [Thoughts]

    这个题有类似于single number的解法,即通过位运算,一遍扫描得到结果。还是读书的时候见过,大概是两个变量,相互做异或、补之类的运算,早不记得详情了。

    现在的解法是比较普通的。因为题目已经说了,除了一个数字以外,其他的都出现了3次,如果我们把那个特殊的数剔除,并把剩下的数于每一位来加和的话,每一位上1出现的次数必然都是3的倍数。所以,解法就在这里,将每一位数字分解到32个bit上,统计每一个bit上1出现的次数。最后对于每一个bit上1出现的个数对3取模,剩下的就是结果。

    public class Solution {
        public int singleNumber(int[] A) {
            int[] bit=new int[32];
            // 把 A[] 中的数转换为二进制数,每一位相加,防盗一个32位数组中去
            for(int i=0;i<A.length;i++){
                for(int j=0;j<32;j++){
                    // &1 相当于 A[i] & 00001 只取到A[i]的最低位
                    bit[j]+=(A[i]>>j&1);
                }
            }
            int ret=0;
            // 因为所有元素出现了3次,除了一个出现了一次的元素。 取余3 剩下的数就是那个元素
            for(int i=0;i<32;i++){
                ret+=(bit[i]%3)<<i;
            }
            return ret;
        }
    }
  • 相关阅读:
    JDK15视频会及新特性总节
    设计模式之访问者模式
    datax分析与思考(一)
    beanfactory中单例bean的初始化过程(一)
    IIS 404错误,错误代码:0x80070002
    WebApi
    多线程--程序员必修课
    委托(续2)
    委托(续)
    委托
  • 原文地址:https://www.cnblogs.com/RazerLu/p/3553622.html
Copyright © 2020-2023  润新知