【求知=>算法】只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
解题思路
- 位运算方案
^符号为异或,本质上是将数字转换为二进制,之后进行进行位运算。
相同得0,不同得1,其实也可以理解成为一种不位移得加法。
异或的特性:
1.恒定律:A ^ 0 = A
2.归零率:A ^ A = 0
3.交换律:A ^ B = B ^ A
4.结合律:(A ^ B) ^ C = A ^ (B ^ C)
还有重要的一点就是:a ⊕ b ⊕ a = b.
nums = [2,2,1]
# nums = [4,1,2,1,2]
ret = 0
for i in range(len(nums)):
ret ^=nums[i]
- 数组切片的方案
(1) 循环数组
(2) 循环获取整个数组的数据
(3) 根据当前的数值、删除对应的数据
(4) 判断数组中不存在删除中的值,然后获取新的数据
nums = [2,2,1]
# nums = [4,1,2,1,2]
for i in range(len(nums)):
news = nums[:]
pop = news.pop(i)
if pop not in news:
print(pop)
博客来源:雨夜的博客