lintcode 中等题:Singleton number II 落单的数 II
题目
给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。
给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4
一次遍历,常数级的额外空间复杂度
解题
可以利用HashMap直接解决,时间复杂度和空间复杂度都是O(N)
1.map中存在该元素则:map.put(num,map.get(num) + 1)
2.map中不存在该元素则:map.put(num , 1)
3.map中这个元素出现次数等于三次,则删除该元素
空间复杂度最坏的情况是O(N*2/3)
public class Solution {
/**
* @param A : An integer array
* @return : An integer
*/
public int singleNumberII(int[] A) {
// write your code here
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
int single = 0 ;
for(int i=0;i<A.length;i++){
if(map.containsKey(A[i])){
map.put(A[i],map.get(A[i]) + 1);
}else{
map.put(A[i],1);
}
if(map.get(A[i]) == 3){
map.remove(A[i]);
}
}
Set<Integer> keySet = map.keySet();
for( Integer num:keySet){
single = num;
}
return single;
}
}
Java Code
总耗时: 2647 ms
这个方法不是很好,空间复杂度不是O(1)
上面Hashmap在put的适合都要根据key计算hashcode,再计算位置,再根据所在链表顺序更新,效率不高
在stackoverflow上,value用数组定义,或者自己定义一个引用类型变量,但是上面说的数组效率最高
import java.util.*;
public class Solution {
/**
* @param A : An integer array
* @return : An integer
*/
public int singleNumberII(int[] A) {
// write your code here
HashMap<Integer,int[]> map = new HashMap<Integer,int[]>(); // 数组存储效率高
for(int i=0;i<A.length;i++){
int[] value = map.get(A[i]);
if(value==null){
map.put(A[i],new int[]{1});
}else{
value[0]++; // 直接+1
}
}
for(Map.Entry<Integer,int[]> entry:map.entrySet()){
int[] value = entry.getValue();
if(value[0]==1){
return entry.getKey();
}
}
return -1;
}
}
当a出现一次的时候,ones能保存a。当a出现两次的时候,twos能保存a。
当a出现三次的时候,ones和twos都清零。
所以,如果一个数值中所有的数都通过这个循环的话,出现三次的数都清零了,
有一个数如果出现一次,它保存在ones中;如果出现两次的话保存在twos中。
public class Solution {
/**
* @param A : An integer array
* @return : An integer
*/
public int singleNumberII(int[] A) {
// write your code here
int ones = 0;
int twos = 0;
for(int i=0;i< A.length ;i++){
ones = (ones^A[i]) & (~ twos);
twos = (twos^A[i]) & (~ ones);
}
return ones;
}
}
Java Code
总耗时: 246 ms
class Solution:
"""
@param A : An integer array
@return : An integer
"""
def singleNumberII(self, A):
# write your code here
ones = 0
twos = 0
for num in A:
ones = (ones ^ num) & (~twos)
twos = (twos ^ num) & (~ones)
return ones
Python Code
总耗时: 258 ms
表示不理解。。。
lintcode 中等题:Singleton number II 落单的数 II的更多相关文章
- lintcode 中等题:Single number III 落单的数III
题目 落单的数 III 给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字. 样例 给出 [1,2,2,3,4,4,5,3],返回 1和5 挑战 O(n)时间复杂度, ...
- 83 落单的数 II
原题网址:http://www.lintcode.com/zh-cn/problem/single-number-ii/ 给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这 ...
- LeetCode 136. Single Number (落单的数)
Given an array of integers, every element appears twice except for one. Find that single one. Note:Y ...
- lintcode 落单的数(位操作)
题目1 落单的数 给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字. 链接:http://www.lintcode.com/zh-cn/problem/single ...
- 84 落单的数 III
原题网址:http://www.lintcode.com/zh-cn/problem/single-number-iii/# 给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到 ...
- LintCode笔记 - 82.落单的数
这一题相对简单,但是代码质量可能不是很好,我分享一下我的做题笔记以及做题过程给各位欣赏,有什么不足望各位大佬指出来 原题目,各位小伙伴也可以试着做一下 . 落单的数 中文English 给出 * n ...
- lintcode:落单的数
题目: 落单的数 给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字. 样例 给出 [1,2,2,1,3,4,3],返回 4 挑战 一次遍历,常数级的额外空间复杂度 ...
- LinCode落单的数
easy 落单的数 查看执行结果 60% 通过 给出2*n + 1 个的数字,除当中一个数字之外其它每一个数字均出现两次.找到这个数字. 您在真实的面试中是否遇到过这个题? Yes 例子 给出 [1, ...
- [codevs3295]落单的数
题目描述 Description 有n个数(n是奇数),其中n-1个数两两成对,有1个数落单,找出这个数.要求O(n)的时间复杂度,O(1)的空间复杂度 输入描述 Input Description ...
随机推荐
- javascript代码复用--继承
由于javascript没有类的概念,因此无法通过接口继承,只能通过实现继承.实现继承是继承实际的方法,javascript中主要是依靠原型链要实现. 原型链继承 原型链继承是基本的继承模式,其本质是 ...
- 基于jquery打造的网页右侧自动收缩浮动在线客服代码
基于jquery打造的网页右侧自动收缩浮动在线QQ客服代码, 当前比较流行的一款QQ在线jquery特效代码, 代码中还带有IE6下PNG图片透明的特效,如果想研究IE6下PNG透明的同学也可以下载研 ...
- 用cookie实现localstorage功能
在项目中需要利用到html5的localstorage.但在利用这个属性的时候却发现无法达到预定目标.经过不断的检查及排除,最后发现原因所在: 项目中使用的浏览器是支持localstorage的,但是 ...
- Android API Level与sdk版本对照表
API等级1: Android 1.0 API等级2: Android 1.1 Petit Four 花式小蛋糕 API等级3: Android 1.5 Cupcake 纸杯蛋糕 API等级4: An ...
- java web 路径 --转载
主题:java(Web)中相对路径,绝对路径问题总结 1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:\xyz\test.txt 代表 ...
- ASP.NET MVC4学习笔记路由系统概念与应用篇
一.概念 1.路由是计算机网络中的一个技术概念,表示把数据包从一个网段转发至另一网段.ASP.NET中的路由系统作用类似,其作用是把请求Url映射到相应的"资源"上,资源可以是一段 ...
- MongoDB Long/Int(长整型)的自增长主键 解决方案
今朝有幸尝芒果,发现自增长ID类型有多种,唯独没有Long/Int. 一思路:1. 自建一个Collection(表,假设名为:IdentityEntity,其中字段:_id, Key, Value, ...
- 【python】 开始第一个项目
根据这篇文章开始上手 http://www.oschina.net/translate/the-flask-mega-tutorial-part-i-hello-world 再加点东西 如果你的环境是 ...
- iOS/Objective-C开发 字典NSDictionary的深复制(使用category)
目标:把NSDictionary对象转换成NSMutableDictionary对象,对象内容是字符串数组,需要实现完全复制(深复制). 如果调用NSDictionary的mutableCopy方法, ...
- (ACM)C++ STL 训练(第一天)
因为老师说ACM考的是纯C++,所以打算抛弃VS的VC++不用了,针对纯C++的编译器有Intel Compiler(不过要钱),MinGw(个人用的),当然还有微软的VC++ 编译器,IDE你们可以 ...