LeetCode: 136. 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?
public class Solution {
public int singleNumber(int[] nums) {
HashMap<Integer, Integer> temp = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; i++) {
if (temp.containsKey(nums[i])) {
temp.remove(nums[i]);
} else {
temp.put(nums[i], 1);
}
}
int result = 0;
Iterator<Integer> iter = temp.keySet().iterator();
if (iter.hasNext()) {
result = iter.next();
}
return result;
} }
异或的方法可以解决这个问题:
My O(n) solution using XOR
known that A XOR A = 0 and the XOR operator is commutative, the
solution will be very straightforward. `
int singleNumber(int A[], int n) {
int result = 0;
for (int i = 0; i<n; i++)
{ result ^=A[i];
} return result; }
最快的方法:
public class Solution {
public int singleNumber(int[] nums) {
for(int i = 1; i < nums.length; i++){
nums[0] = nums[0] ^ nums[i];
}
return nums[0];
}
}