解法一:使用了额外空间,用map来存(用到了hash table的思路,key与value)
public class Solution {
public int singleNumber(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
for(int val : nums){
if(map.containsKey(val)){
map.put(val, map.get(val) + 1);
}
else{
map.put(val, 1);
}
}
for(Map.Entry<Integer, Integer> entry : map.entrySet()){
if(entry.getValue() == 1){
return entry.getKey();
}
}
return 0;
}
}
解法二:最优解(使用异或)(bit manipulation)
(异或是满足交换律的)
public class Solution {
public int singleNumber(int[] nums) {
int res = 0;
for(int val : nums){
res = res ^ val;
}
return res;
}
}