题目地址:
原题目:
本菜鸡的想法:
- 先给数组排序,使得两个相同的数挨在一起
- 防止数组越界,从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 异或之后就等于它本身
类似的题目还有 268. Missing Number (缺失数字)