zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 137 只出现一次的数字 II(二)

    137. 只出现一次的数字 II

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。

    说明:

    你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

    示例 1:

    输入: [2,2,3,2]
    输出: 3
    示例 2:

    输入: [0,1,0,1,0,1,99]
    输出: 99

    PS:
    对每一位单独统计出现1的次数, 如果出现的次数不能整除3说明唯一存在的数在这一位上为1, 时间复杂度O(32N)

    class Solution {
      public int singleNumber(int[] nums) {
        
            int ret = 0;
            for(int i = 0; i < 32; ++i) {
                int bitnums = 0;
                //二进制向左走一位
                int bit = 1 << i;
                for(int num : nums) {
                //每个数这一位是不是1如果是1就++
                    if((num&bit) != 0)
                        bitnums++;
                }
                //如果不能%3的话,证明那个出现过一次的数在这一位是1;
                if(bitnums % 3 != 0)
                    ret |= bit;
            }
            return ret;
        }
    }
    
  • 相关阅读:
    java多线程实例
    Python——文件操作
    Python—— *与** 参数说明
    Python——序列
    多元线性回归
    Gson转换时,Double转式化
    ftp上传下载
    发送邮件
    jsonp的使用
    用CSS3和Canvas来画网格
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075499.html
Copyright © 2011-2022 走看看