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;
        }
    }
    
  • 相关阅读:
    基督山伯爵---大仲马
    数据结构
    11. 标准库浏览 – Part II
    python 标准库
    Python 官方文件
    Python 函数
    学员名片管理系统
    如何进入多级菜单
    Python 文件操作
    Python 字符串 (isdigit, isalnum,isnumeric)转
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946771.html
Copyright © 2011-2022 走看看