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?

题目:数组中只有一个例外只出现一次,其他都出现三次

位运算实现:

Java中位运算:与(&),或(|),非(~),异或(^)【同0异1】,左移(<<),右移(>>)
Java中的int是用(4byte=32bit)表示的。Java中各类型字节数是由JVM决定的,与系统或平台无关
解法:主要思想是通过32次循环,把result的32个二进制位一位一位的拼出来,为O(32N)复杂度的算法
原理:用一个bit_count来标记数组所有项在第i二进制位为1的总位数,如果bit_count能整除3【mod 3】,说明result在这个二进制位为0,如果余1就说明result在这个二进制位为1
通用的算法,如果不是重复3次而是K次,就用mod k来确定result的二进制位。

public class Solution {public int singleNumber(int[] A) {int result = 0;                      //result初始为32位0for(int i=0; i<=32; i++){            //i=0代表32为中的倒数第一位  int bit_count = 0;               //bit_count表示i位为1的计数for(int j=0; j<A.length; j++){bit_count += (A[j]>>i) & 1;  //把A[j]右移i位,再与000...0001按位与,则A[j]的i位为0结果为0,i位为1结果为1,类似累加}result |= (bit_count%3)<<i;      // bit_count%3要么为0要么为1,为1就说明result的i位为1,将其左移i位放到正确位置}return result;}
}

Map<A[i], count>实现:其时间复杂度满足要求,只是需要额外的内存

public class Solution {public int singleNumber(int[] A) {int result = 0;Map<Integer,Integer> hashMap = new HashMap<Integer,Integer>();   //Map<A[i],count>for(int i=0; i<A.length; i++){if(hashMap.containsKey(A[i])){hashMap.put(A[i],hashMap.get(A[i])+1);}else{hashMap.put(A[i],1);}}Iterator<Map.Entry<Integer,Integer>> iterator = hashMap.entrySet().iterator();while(iterator.hasNext()){Map.Entry<Integer,Integer> entry = iterator.next();if(entry.getValue()!=3){result = entry.getKey();break;}}return result;}
}

转载于:https://www.cnblogs.com/dosmile/p/6444462.html

LeetCode | Single Number II相关推荐

  1. [LeetCode]Single Number II

    今天室友推荐了一道LeetCode上面的练习题Single Number II,题目大概的意思是有一个整形的数组,里面只有一个数是出现一次的,其他的数都出现了三次,然后让把这个数找出来. 第一眼看到这 ...

  2. LeetCode Single Number II(位操作)

    问题:给出一个数组,其中只有一个数出现一次,其它数出现三次,找出出现一次的数 思路: 1.统计每位出现的次数,如果mod 3等于1,则将该位置为1,最后即得到出现一次的数. 2.使用三个变量来分别来表 ...

  3. [Leetcode] single number ii 找单个数

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

  4. LeetCode Single Number I / II / III

    [1]LeetCode 136 Single Number 题意:奇数个数,其中除了一个数只出现一次外,其他数都是成对出现,比如1,2,2,3,3...,求出该单个数. 解法:容易想到异或的性质,两个 ...

  5. 【异或】LeetCode 137. Single Number II

    LeetCode 137. Single Number II Solution1:不会做,抄的 博客转载自:http://www.cnblogs.com/grandyang/p/4263927.htm ...

  6. Single Number II(LintCode)

    Single Number II Given 3*n + 1 numbers, every numbers occurs triple times except one, find it. Examp ...

  7. Leetcode 137. Single Number II JAVA语言

    1 2 3 Given an array of integers, every element appears three times except for one, which appears ex ...

  8. leetcode - Single Number

    今天开始刷leetcode上的题,争取校招前刷过一遍,从AC率最高的题目开始刷,不废话了,看题 题目:Single Number Given an array of integers, every e ...

  9. leetcode Single Number python

    Single Number Given an array of integers, every element appears twice except for one. Find that sing ...

最新文章

  1. [Shell 脚本] 备份数据库文件至OSS服务(纯shell脚本无sdk)
  2. UVa 11063 - B2-Sequence
  3. NAND Flash和NOR Flash的区别
  4. 23种设计模式中的解释器模式
  5. python设置循环范围_python – 如何检查循环范围的重叠(重叠的年度循环周期)
  6. Method for Discovering Network Topology中文翻译【Z-Stack Home 1.2.0开发文档】
  7. 模板共享指针(shared_ptr)原理实现
  8. MySQL与PostgreSQL
  9. java puzzlers英文版_java puzzlers [更新至14.04.03]
  10. 【运维】PowerShell编程 目录文件相关方法的封装与案例详解
  11. 重磅!!Redis 6.0.0 已发布,有史以来改变最大的版本
  12. linux sed命令
  13. [信道编码/Channel Coding】信道编码的整体框架
  14. 吴伯凡-认知方法论-如何犯一个“正确”的错误
  15. centos7 查看multipath服务状态是start condition failed,/etc/multipath.conf was not met
  16. 火狐插件restclient发送post请求
  17. 俄罗斯套娃信封问题 转https://www.jianshu.com/p/9d9495ef4372
  18. 机器学习及其应用2015 [高新波,张军平 主编] 2015年版
  19. JavaScript基础——使用Canvas画图
  20. 洛谷P2357 守墓人

热门文章

  1. 深度学习(三十六)异构计算CUDA学习笔记(1)
  2. confer安装与连接度的计算
  3. ENVI5.3安装教程|带资源
  4. signature=0d9b3a8f96c5f64e92cd85aaf7e70ac0,Scale controller
  5. mysql数据库varchar_MySQL数据库char与varchar的区别分析及使用建议
  6. 渗透测试入门4之内网跨边界应用
  7. HP DL G8系列服务器安装Server2003系统显卡驱动的问题
  8. 员工转正述职答辩问什么问题_展风采 创未来 | 记德信地产杭州公司新员工转正述职答辩...
  9. springboot整合jwt_springBoot整合JWT使用
  10. mysql insert插入的3种方法