一. 题目
-
题目
-
示例
二. 方法一: hash表
-
解题思路
统计每个元素出现的次数, 然后找出出现次数为1的元素即可 -
解题代码
def singleNumber(self, nums: List[int]) -> int: map1 = collections.Counter(nums) for k in map1: if map1[k] == 1: return k
-
分析
时间复杂度: O(n)
空间复杂度: O(n)
三. 方法二: 位运算
-
解题思路
-
异或的性质
两个数字异或的结果a^b是将 a 和 b 的二进制每一位进行运算,得出的数字。 运算的逻辑是: 如果同一位的数字相同则为 0,不同则为 1 -
异或的规律
-
任何数和本身异或则为0
-
任何数和 0 异或是本身
-
异或运算满足交换律,即:
a ^ b ^ c = a ^ c ^ b
-
-
-
解题代码
def singleNumber(self, nums: List[int]) -> int: result = 0 for ele in nums: result ^= ele return result
-
分析
时间复杂度: O(n)
空间复杂度: O(1)