题目:
Given a non-empty 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?
Example 1:
Input: [2,2,1]
Output: 1
Example 2:
Input: [4,1,2,1,2]
Output: 4
import java.util.HashSet;
import java.util.Iterator;
public class SingleNumber {
public static int singleNumber(int[] nums) {
HashSet<Integer> s = new HashSet<>();
for (int i = 0; i < nums.length; i++) {
if (!s.add(nums[i])) s.remove(nums[i]);
}
Iterator<Integer> it = s.iterator();
return it.next();
}
public static void main(String[] args) {
int[] nums = {4,1,2,1,2};
System.out.println(singleNumber(nums));
}
}
LeetCode一种利用异或运算解决此问题,时间消耗0ms,效率非常高
public class SingleNumber {
public static int singleNumber(int[] nums) {
int result = 0;
for(int i=0;i<nums.length;i++){
result = result ^ nums[i];
}
return result;
}
public static void main(String[] args) {
int[] nums = {4,1,2,1,2};
System.out.println(singleNumber(nums));
}
}