问题描述:

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?

提示:bit manipulation(位操作)

参考:http://www.acmerblog.com/leetcode-single-number-ii-5394.html?utm_source=tuicool&utm_medium=referral

分析:由于所有数字都是出现奇数次,所以,并不是简单的异或运算。

考虑所有数字用二进制表示,如果把第i个位置上所有数字的和对3取余,那么只会有两种结果,0或1。因此,取余的结果就是那个single number。

java 代码:

一、一个直接的实现就是用大小为 32的数组来记录所有位上的和。

  1. public int singleNumber(int[] nums){
  2.  
  3. //所有数字都使用32位二进制表示,初始为0
  4. int[] count = new int[32];
  5. int result = 0; //singlenumber
  6. for(int i = 0; i < 32; i++){
  7. for(int j = 0; j < nums.length; j++){
  8. int key = (nums[j] >> i) & 1;
  9. if (key == 1) { //右移,获得第i个bit,统计1的个数
  10. count[i] ++ ;
  11. }
  12. }
  13. //第i位左移,然后将所有位相或,最终得到singlenumber
  14. result |= ((count[i] % 3) << i);
  15. }
  16. return result;
  17. }

二、使用掩码,改进算法一

  1. ones   代表第ith 位只出现一次的掩码变量
  2. twos  代表第ith 位只出现两次的掩码变量
  3. threes  代表第ith 位只出现三次的掩码变量
  1. public int singleNumber(int[] nums){
  2.  
  3. int ones = 0, twos = 0, threes = 0;
  4.  
  5. for(int i = 0; i < nums.length; i++){
  6.  
  7. twos = twos | ( ones & nums[i]);
  8.  
  9. ones = ones ^ nums[i]; //异或3次 和 异或 1次的结果是一样的
  10.  
  11. threes = ones & twos;
  12.  
  13. //对于ones 和 twos, 把出现了3次的位置设置为0 (取反之后1的位置为0)
  14.  
  15. ones = ones & ~threes;
  16.  
  17. twos = twos & ~threes;
  18.  
  19. }
  20.  
  21. return ones;
  22.  
  23. }

Single Number II leetcode java的更多相关文章

  1. Single Number III leetcode java

    问题描述: Given an array of numbers nums, in which exactly two elements appear only once and all the oth ...

  2. Ugly Number II leetcode java

    问题描述: Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime fa ...

  3. Single Number II - LeetCode

    Given an array of integers, every element appears three times except for one. Find that single one. ...

  4. Leetcode 137 Single Number II 仅出现一次的数字

    原题地址https://leetcode.com/problems/single-number-ii/ 题目描述Given an array of integers, every element ap ...

  5. LeetCode 137. Single Number II(只出现一次的数字 II)

    LeetCode 137. Single Number II(只出现一次的数字 II)

  6. LeetCode(137) Single Number II

    题目 Given an array of integers, every element appears three times except for one. Find that single on ...

  7. 【LeetCode】137. Single Number II 解题报告(Python)

    [LeetCode]137. Single Number II 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/single- ...

  8. 【leetcode】Single Number && Single Number II(ORZ 位运算)

    题目描述: Single Number Given an array of integers, every element appears twice except for one. Find tha ...

  9. 【题解】【位操作】【Leetcode】Single Number II

    Given an array of integers, every element appears three times except for one. Find that single one. ...

随机推荐

  1. 【配置详解】Quartz配置文件详解

    我们通常是通过quartz.properties属性配置文件(默认情况下均使用该文件)结合StdSchedulerFactory 来使用Quartz的.StdSchedulerFactory 会加载属 ...

  2. MVC 之 初识(一)

    创建一个mvc项目,在项目中会startup.cs文件,startup文件主要是将项目寻找一个宿主 过去,项目一般都是寄宿在iis上的,通过owin可以寄宿到不同的宿主. 可以关闭owin:<a ...

  3. (转)干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码)

    干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码) 该博客来源自:https://mp.weixin.qq.com/s?__biz=MzA4NzE1NzYyMw==& ...

  4. HDU 5649 DZY Loves Sorting(二分答案+线段树/线段树合并+线段树分割)

    题意 一个 \(1\) 到 \(n\) 的全排列,\(m\) 种操作,每次将一段区间 \([l,r]\) 按升序或降序排列,求 \(m\) 次操作后的第 \(k\) 位. \(1 \leq n \le ...

  5. postgresql change table

    --if cloumn exist SELECT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='ent' A ...

  6. Mac环境下扩容 .vmdk 镜像容量

    参考: Resizing a VirtualBox Disk Image (.vmdk) on a Mac Mac环境下扩容 .vmdk 镜像容量 在安装虚拟机时,原有的vmdk镜像容量只有20G,在 ...

  7. 用flvplayer.swf在网页中播放视频(网页中flash视频播放的实现)

    原:http://blog.csdn.net/ricciozhang/article/details/46868201 由于公司项目的需求,需要在展示一些信息的时候能够播放视频,拿到这个要求,我就从最 ...

  8. wxss与rpx

    WXSS(WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式. WXSS 用来决定 WXML 的组件应该怎么显示. 为了适应广大的前端开发者,WXSS 具有 CSS ...

  9. django认证系统 Authentication

    Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. Django的认证系统包含了身份验证和权限管理两部分.简单地说,身份验证用于核实某个用户是否合法,权限管理 ...

  10. Centos7默认自带了Python2.7版本,但是因为项目需要使用Python3.x,这里提供一种比较快捷方便的安装方式

    安装必要工具 yum-utils: $ sudo yum install yum-utils 使用yum-builddep为Python3构建环境,安装缺失的软件依赖,使用下面的命令会自动处理.$ s ...