2022年02月14日 力扣每日一题

题目

给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。

示例 1:

输入: nums = [1,1,2,3,3,4,4,8,8]
输出: 2

示例 2:

输入: nums =  [3,3,7,7,10,11,11]
输出: 10

提示:

  • 1 <= nums.length <= 105
  • 0 <= nums[i] <= 105

进阶: 采用的方案可以在 O(log n) 时间复杂度和 O(1) 空间复杂度中运行吗?

Related Topics
  • 数组
  • 二分查找
  • 个人解法

    根据异或的规则,相同为0,不同为1,这样把所有数都异或一遍,结果就是唯一的只出现一次的数

    {% tabs categories%}

    public int singleNonDuplicate(int[] nums) {
        int result = nums[0];
        for (int i = 1; i < nums.length; i++) {
            result ^= nums[i];
        }
        return result;
    }
    
    import operator
    from functools import reduce
    from typing import List
    
    
    class Solution:
        def singleNonDuplicate(self, nums: List[int]) -> int:
            return reduce(operator.xor, nums)
    

    {% endtabs %}