136.Single Number
条评论题目
给定一个 非空 整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
解答
思路
使用空间代换
用 set 过滤一次,遍历原有数组,如果存在则移除 set 中数据,最后留存数据
使用 dict(map)记录,然后统计 values
不适用空间代换
异或运算的运用,案例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# 原始数据
xor = 0
nums = [2, 2, 4, 3, 4]
# 异或运算过程
0 0 0 0 = xor = 0
0 0 1 0 = nums[0] = 2
-------
0 0 1 0 = 2
0 0 1 0 = nums[1] = 2
-------
0 0 0 0 = 0
0 1 0 0 = nums[2] = 4
-------
0 1 0 0 = 4
0 0 1 1 = nums[3] = 3
-------
0 1 1 1 = 7
0 1 0 0 = nums[4] = 4
-------
0 0 1 1 = 3
代码
1
2
3
4
5
6
7
8
9
10class Solution:
def singleNumber(self, nums: List[int]) -> int:
xor = 0
for i in range(len(nums)):
xor ^= nums[i]
return xor
if __name__ == '__main__':
nums = [2, 2, 4, 3, 4]
print(Solution().singleNumber(nums))
写在最后
版本 | 内容 | 时间 |
---|---|---|
v1.0.0 | 1. 初始化文档 | 2020-01-15 17:40:17 |
本文标题:136.Single Number
文章作者:LeerGo
发布时间:2020-01-15
最后更新:2022-09-10
原始链接:https://blog.bugfix.fun/2020/01/15/32906.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!