題目地址:
原題目:
本菜雞的想法:
- 先給數組排序,使得兩個相同的數挨在一起
- 防止數組越界,從0到nums.length-2遍歷數組找不相同的相鄰兩個數,較小的那個即是Single Number
- 找不到則說明最後一個數字是 Single Number
public int singleNumber(int[] nums) {
java.util.Arrays.sort(nums);
int len = nums.length;
for (int i=0;i<len-1;i++){
if (nums[i]!=nums[i+1]){
return nums[i];
}
i++;
}
// 0 - len-2 還沒找到 則Single Number就是最後一個數
return nums[len-1];
}
信心滿滿的提交,一看排名
觀摩大神們的提交記錄發現又是神奇的位運算
class Solution {
public int singleNumber(int[] nums) {
int result = 0;
for (int num:nums){
result = result ^ num;
}
return result;
}
}
位異或運算(^)
運算規則是:兩個數轉爲二進制,然後從高位開始比較,如果相同則爲0,不相同則爲1。
即出現了偶數次的數異或之後會變成0,出現奇數次的數,和 0 異或之後就等於它本身