位运算及Python实现
前言
刷leetcode的第136题时遇到了一种用位运算实现的方法,然而大一学过的东西到现在都有些模糊,于是补充回忆了一下位运算相关的知识
题目描述:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
解题思路:
使用 **位运算(异或)** 进行求解。
根据题目描述,在整体的列表中,除了一个只出现一次的元素之外,其余元素均出现两次。
在异或运算中,两个相同的元素进行异或结果为0,任意元素与0做异或操作,结果等于该元素本身。
异或运算具有交换律和结合律,对所有的元素做异或操作,相当于先对相同元素进行异或得到0,在与仅出现一次的元素进行异或
a^b^c^a^b == (a^a)^(b^b)^c == 0^0^c == c
这样就找出了只出现一次的元素
六种位运算
- 与 &:两个位置上均为1时,结果才是1,否则结果是0
- 或 |:两个位置的结果均为0时,结果才是0
- 异或 ^:两个位置相同结果为0,不同时结果为1
- 取反 ~&#