LeetCode 260.只出现一次的数字III
只出现一次的数字III
给你一个整数数组 nums
,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。
输入:nums = [1,2,1,3,2,5] |
方法:位运算
算法思路:
- 异或运算
^
,相同的两个数之间异或为0
。将数组每一个数进行异或,得到两个只出现一次元素的异或值diff
。 n & (-n)
,可得n
的位级表示中最低的那一位1
。计算diff = diff * - diff
,得到diff
的最低一位1
,即两个只出现一次的元素在该位上不同。- 通过
diff & num
是否等于0
将数组中的元素分类两类,分开异或,即可得到两个只出现一次的元素。
代码实现:
class Solution { |
复杂度分析:
- 时间复杂度:,其中是数组
nums
的长度。 - 空间复杂度:。
参考:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Abacteria的学习小站!