每日一题-数组 leetcode136

165 阅读1分钟

一、题目描述

二、提交代码

class Solution {
    public int singleNumber(int[] nums) {
        Arrays.sort(nums);
        int index =nums.length-1;
        for(int i =0;i<nums.length-1;i++){
            if(nums[i]==nums[i+1]){
                i+=1;
            }
            else{
                index = i;
                break;
            }
        }
        return nums[index];
    }
}

三、注意事项

  1. Arrays的sort()方法,参数为排序数组对象nums
  2. index应初始化为最后一个元素的索引,避免结果为最后一个数字,而被跳过判断。
  3. 使用了系统自带函数

四、其他优解思路

class Solution {
    public int singleNumber(int[] nums) {
        int single = 0;
        for (int num : nums) {
            single ^= num;
        }
        return single;
    }
}
  1. ^异或运算符
  2. 相同数异或等于0
  3. 一个数与0异或等于数本身
  4. 异或运算满足交换律结合律
  5. 即使不排序,所有元素异或后=所有 相同元素异或最后与结果元素异或
  6. 可以从数学层面考虑解法