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?
地址:https://oj.leetcode.com/problems/single-number/
这个题我最直接的想法就是建立一个Map ,然后进行一次查找就能完成题目所要求。
public class Solution {
public int singleNumber(int[] A) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
if(A.length == 0 || A == null){
return 0;
}
for(int i=0;i<A.length;i++){
if(map.containsKey(A[i])){
int value = map.get(A[i]);
map.put(A[i], value+1);
}else {
map.put(A[i], 1);
}
}
for(int i=0;i<A.length;i++){
int value = map.get(A[i]);
if(value == 1){
return A[i];
}
}
return 0;
}
}
利用异或操作可以进行精巧计算。
异或性质
1、交换律
2、结合律(即(a^b)^c == a^(b^c))
3、对于任何数x,都有x^x=0,x^0=x
4、自反性 A XOR B XOR B = A xor 0 = A
public class Solution {
public int singleNumber(int[] A) {
if(A.length == 0 || A == null){
return 0;
}
int result = A[0];
for(int i=1;i<A.length;i++){
result^=A[i];
}
return result;
}
}