【求知=>算法】只出现一次的数字

156 阅读1分钟

【求知=>算法】只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]

输出: 1

示例 2:

输入: [4,1,2,1,2]

输出: 4

解题思路

  1. 位运算方案

^符号为异或,本质上是将数字转换为二进制,之后进行进行位运算。

相同得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. 数组切片的方案

(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)

搜索框传播样式-标准色版.png

博客来源:雨夜的博客