leetcode-只出现一次的数字
基本思路
利用hash表存出现的次数,这样占用的空间大
class Solution {
public int singleNumber(int[] nums) {
HashMap<Integer,Integer> map = new HashMap<>();
for(int i = 0;i<nums.length;i++){
if(!map.containsKey(nums[i])){
map.put(nums[i],1);
}else{
map.put(nums[i],2);
}
}
for(Integer i:map.keySet()){
if(map.get(i)==1){
return i;
}
}
return 0;
}
}
网上思路
利用异或,当两个数相同时异或结果为0,一个数与0异或结果为该数,那么遍历一边数组,每个数字都异或,出现两次的数字抵消为0,结果就是剩下的出现一次的数字
class Solution {
public int singleNumber(int[] nums) {
int ans = nums[0];
if (nums.length > 1) {
for (int i = 1; i < nums.length; i++) {
ans = ans ^ nums[i];
}
}
return ans;
}
}