LeetCode | 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?
题目:数组中只有一个例外只出现一次,其他都出现三次
位运算实现:
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相关推荐
- [LeetCode]Single Number II
今天室友推荐了一道LeetCode上面的练习题Single Number II,题目大概的意思是有一个整形的数组,里面只有一个数是出现一次的,其他的数都出现了三次,然后让把这个数找出来. 第一眼看到这 ...
- LeetCode Single Number II(位操作)
问题:给出一个数组,其中只有一个数出现一次,其它数出现三次,找出出现一次的数 思路: 1.统计每位出现的次数,如果mod 3等于1,则将该位置为1,最后即得到出现一次的数. 2.使用三个变量来分别来表 ...
- [Leetcode] single number ii 找单个数
Given an array of integers, every element appears three times except for one. Find that single one. ...
- LeetCode Single Number I / II / III
[1]LeetCode 136 Single Number 题意:奇数个数,其中除了一个数只出现一次外,其他数都是成对出现,比如1,2,2,3,3...,求出该单个数. 解法:容易想到异或的性质,两个 ...
- 【异或】LeetCode 137. Single Number II
LeetCode 137. Single Number II Solution1:不会做,抄的 博客转载自:http://www.cnblogs.com/grandyang/p/4263927.htm ...
- Single Number II(LintCode)
Single Number II Given 3*n + 1 numbers, every numbers occurs triple times except one, find it. Examp ...
- 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 ...
- leetcode - Single Number
今天开始刷leetcode上的题,争取校招前刷过一遍,从AC率最高的题目开始刷,不废话了,看题 题目:Single Number Given an array of integers, every e ...
- leetcode Single Number python
Single Number Given an array of integers, every element appears twice except for one. Find that sing ...
最新文章
- [Shell 脚本] 备份数据库文件至OSS服务(纯shell脚本无sdk)
- UVa 11063 - B2-Sequence
- NAND Flash和NOR Flash的区别
- 23种设计模式中的解释器模式
- python设置循环范围_python – 如何检查循环范围的重叠(重叠的年度循环周期)
- Method for Discovering Network Topology中文翻译【Z-Stack Home 1.2.0开发文档】
- 模板共享指针(shared_ptr)原理实现
- MySQL与PostgreSQL
- java puzzlers英文版_java puzzlers [更新至14.04.03]
- 【运维】PowerShell编程 目录文件相关方法的封装与案例详解
- 重磅!!Redis 6.0.0 已发布,有史以来改变最大的版本
- linux sed命令
- [信道编码/Channel Coding】信道编码的整体框架
- 吴伯凡-认知方法论-如何犯一个“正确”的错误
- centos7 查看multipath服务状态是start condition failed,/etc/multipath.conf was not met
- 火狐插件restclient发送post请求
- 俄罗斯套娃信封问题 转https://www.jianshu.com/p/9d9495ef4372
- 机器学习及其应用2015 [高新波,张军平 主编] 2015年版
- JavaScript基础——使用Canvas画图
- 洛谷P2357 守墓人
热门文章
- 深度学习(三十六)异构计算CUDA学习笔记(1)
- confer安装与连接度的计算
- ENVI5.3安装教程|带资源
- signature=0d9b3a8f96c5f64e92cd85aaf7e70ac0,Scale controller
- mysql数据库varchar_MySQL数据库char与varchar的区别分析及使用建议
- 渗透测试入门4之内网跨边界应用
- HP DL G8系列服务器安装Server2003系统显卡驱动的问题
- 员工转正述职答辩问什么问题_展风采 创未来 | 记德信地产杭州公司新员工转正述职答辩...
- springboot整合jwt_springBoot整合JWT使用
- mysql insert插入的3种方法