Single Number
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
1. 不考虑多余内存空间,用HashMap解决很常规,时间复杂度为O(n)。
public class Solution {
public int singleNumber(int[] A) {
HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
int key,val;
val=0;
for(int i=0;i<A.length;i++){
if(map.containsKey(A[i])){
map.remove(A[i]);
}
else{
map.put(A[i],A[i]);
}
}
Iterator iter=map.keySet().iterator();
while(iter.hasNext()){
val=map.get(iter.next());
}
return val;
}
}
2. note里又说do it without using extra memory,这就难办了。想了很久没找到诀窍,最后求助万能互联网。
异或运算:^
输入 | 输入 | 结果 |
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
代码变得十分简洁,太棒了!
public class Solution {
public int singleNumber(int[] A) {
for(int i=1;i<A.length;i++){
A[0]=A[0]^A[i];
}
return A[0];
}
}