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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年05月03日 10时08分24秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【框架-MFC】CMFCMenuBar 菜单按钮的图标添加
2019-05-02
【Windows】Win10 查找“组或用户名”为TrustedInstaller 对象
2019-05-02
【语言-c#】C# 注释详细介绍说明
2019-05-02
MySQL 内存模型
2019-05-02
Ubuntu下gyp简单入门实例
2019-05-02
express 解析post方式下的json参数
2019-05-02
node.js AES/ECB/PKCS5Padding 与其他语言的加密解密通用
2019-05-02
node.js 实现一个简单的登录拦截器
2019-05-02
c++抽象类、纯虚函数以及巧用纯虚析构函数实现接口类【转】
2019-05-02
WebRTC学习记录(1):采集microphone到文件原理实践&讲解【转】
2019-05-02
Caffe 安装错误记录及解决办法【转】
2019-05-02
Android用类继承Application的全局变量使用注意
2019-05-02
qml之TextField使用笔记
2019-05-02
排序算法之冒泡排序
2019-05-02
排序算法之选择排序
2019-05-02