LeetCode第136題只出現一次的數字
阿新 • • 發佈:2021-02-01
題目要求
給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
關鍵點:某個元素只出現一次,其餘每個元素均出現兩次
使用知識點:異或運算
異或運算特點:
- a ^ a ^ b ^ c ^ c = b; a ^ b ^ a ^ c ^ c = b
- a ^ a = 0; a ^ b = c
題目要求的是除了某個元素只出現一次以外,其餘的都出現了兩次,剛好用異或可以把其餘出現兩次的都個消除掉
第一種方式使用位運算
class Solution {
public int singleNumber(int[] nums) {
int sum = 0;
for(int i = 0;i < nums.length;i++){
sum ^= num[i];
}
return sum;
}
}
第二種方式使用HashMap
import java.util.*;
class Solution {
public int singleNumber(int[] nums) {
HashMap<Integer,Integer> map = new HashMap<>();
for(Integer i:nums){//i做key值
Integer count = map.get( i);//獲取i的value值
count = count==null?1:++count;//如果為null則就賦值count為1count用於記錄次數,不為null則就++count
map.put(i,count);//新增元素
}
for(Integer i: nums){
if(map.get(i) == 1){
return i;
}
}
return 0;
}
}