LC 136设计与位运算简单第 72 / 95 题

只出现一次的数字

Single Number

位运算异或
本机进度仅保存在当前浏览器

题目描述

给你一个非空整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。要求线性时间、不使用额外空间。

示例:nums = [4, 1, 2, 1, 2],输出 4。

解题思路

  1. 异或的三条性质是解题核心:x ^ x = 0,x ^ 0 = x,异或满足交换律与结合律。
  2. 把全部数字异或在一起,成对的元素互相抵消为 0,只剩出现一次的那个。

参考实现

查看参考实现Python · 建议先自行作答
def singleNumber(nums):
    # 成对元素异或抵消,剩余即答案
    ans = 0
    for x in nums:
        ans ^= x
    return ans

复杂度与归属

时间复杂度O(n)
空间复杂度O(1)
所属分类设计与位运算
题源LeetCode 136

关联教程

返回题图鉴