LeetCode 136 Single Number
来源:互联网 发布:手机电信网络加速器 编辑:程序博客网 时间:2024/04/30 12:39
题意
给出一个整数数组,除了一个元素只出现一次,数组中的每个元素出现了两次,找出该元素
PS:线性的时间复杂度,能否不用额外空间完成?
题解
建立一个HashMap,键是整数元素,值是元素出现的次数。对数组进行HashMap的建立,然后遍历HashMap,找出value为1的元素,返回Map的key键
遍历过程参考 Java中HashMap遍历的两种方式
Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object key = entry.getKey(); Object val = entry.getValue(); }
public class Solution { public int singleNumber(int[] nums) { //key是整数 value是该整数出现的次数 Map<Integer,Integer> numsMap = new HashMap<Integer,Integer>(); int res = 0; for(int i = 0;i < nums.length;i ++) { //if(numsMap.containsKey(num[i] == false) //Map中没有元素,就放入该元素 if(numsMap.get(nums[i]) == null) numsMap.put(nums[i],1); else { //有该元素,将元素的value+1更新HashMap numsMap.put(nums[i],numsMap.get(nums[i]) + 1); } } //遍历HashMap,找出value = 1的值 Iterator iter = numsMap.entrySet().iterator(); while(iter.hasNext()) { //Entry对象 Map.Entry entry = (Map.Entry) iter.next(); //Object key = entry.getKey(); //Object val = entry.getValue(); //Object转int if(Integer.parseInt(String.valueOf(entry.getValue())) == 1) res = Integer.parseInt(String.valueOf(entry.getKey())); } /* Set set = numsMap.keySet(); //iter迭代器 Iterator iter = set.iterator(); while(iter.hasNext()) { //String str = (String)iter.next(); String str = "" + iter.next(); if(Integer.valueOf(str) == 1) res = Integer.valueOf(str); } */ return res; }}
当然,由于又是找不同的一个数字,用Solutions提到的位运算同样简单:
we use bitwise XOR to solve this problem :
first , we have to know the bitwise XOR in java
0 ^ N = N
N ^ N = 0
So….. if N is the single number
N1 ^ N1 ^ N2 ^ N2 ^…………..^ Nx ^ Nx ^ N
= (N1^N1) ^ (N2^N2) ^…………..^ (Nx^Nx) ^ N
= 0 ^ 0 ^ ……….^ 0 ^ N
= N
public int singleNumber(int[] nums) { int result = 0; for(int i : nums) { result ^= i; } return result;}
0 0
- LeetCode(136)Single Number
- LeetCode 136 Single Number
- LeetCode 136 Single Number
- LeetCode: Single Number [136]
- [leetcode 136] Single Number
- [leetcode]136 Single Number
- leetcode-136 Single Number
- LeetCode 136 Single Number
- LeetCode 136 Single Number
- leetcode || 136、Single Number
- LeetCode 136 : Single Number
- leetcode Single Number 136
- LeetCode---(136) Single Number
- leetcode#136 Single Number
- Leetcode[136]-Single Number
- leetcode-136-Single Number
- Leetcode 136 Single Number
- leetcode[136]:Single Number
- Linux shell pushFileToRemoteServer.sh
- EventBus的使用和源码解析
- android 关于使用SharedPreferences来保存对象里既有属性又有集合的问题
- 1030. 完美数列
- DialogFragment实现右侧、中间、底部菜单
- LeetCode 136 Single Number
- LeetCode 423. Reconstruct Original Digits from English解题笔记
- JavaScript中的遍历详解
- Wiki引擎mediawiki
- 笔试知识点:c++中sizeof(空类)= 1
- 20170325_请说出成员函数的重载、覆盖和隐藏的区别与联系
- 归并排序(Merge Sort)+计算数列逆序数
- 装备选择
- Linux用tc实现模拟网络延时的shell脚本