LeetCode 260. 只出现一次的数字 III(位运算)
发布日期:2021-07-01 03:15:32 浏览次数:2 分类:技术文章

本文共 819 字,大约阅读时间需要 2 分钟。

1. 题目

给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。

示例 :输入: [1,2,1,3,2,5]输出: [3,5]

注意:

结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。

你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?

类似题目

2. 解题

  • 先将所有数字异或,等同于那2个不同的数异或 bit
  • 在将上面结果取负并与自己与 bit = bit & -bit,得到 bit 为1的最低位(即那2个数不同的二进制位)
  • 在将给的数组每个数与 bit &,将数组分成2部分,2部分各自做异或^ ,即可得到2个数

关于第二步的举例:8,13

1000
1101
^
0101 bit
bit & -bit
0001

假如 bit = 1100

bit & -bit = 0100(得到的是最低位的1)

class Solution {
public: vector
singleNumber(vector
& nums) {
int bit = 0, i, n1 = 0, n2 = 0; for(i = 0; i < nums.size(); ++i) bit ^= nums[i]; bit &= (-bit); for(i = 0; i < nums.size(); ++i) {
if((bit & nums[i]) == 0)//内层括号!!!不能少 n1 ^= nums[i]; else n2 ^= nums[i]; } return {
n1, n2}; }};

在这里插入图片描述

转载地址:https://michael.blog.csdn.net/article/details/101104783 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode 1122. 数组的相对排序
下一篇:LeetCode 137. 只出现一次的数字 II(位运算)

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年05月03日 10时08分24秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章