查看: 1634|回复: 0

[转载] Lintcode84 Single Number |||solution 题解

[复制链接]
论坛徽章:
0
发表于 2017-12-18 15:35 | 显示全部楼层 |阅读模式
【题目描述】


Given2*n + 2numbers, every numbers occurs twice except two, find them.
给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字。
【题目链接】
www.lintcode.com/en/problem/single-number-iii/
【题目解析】
不妨设最后两个只出现一次的数分别为x1, x2. 那么遍历数组时根据两两异或的方法可得最后的结果为x1 ^ x2, 如果我们要分别求得x1和x2, 我们可以根据x1 ^ x2 ^ x1 = x2求得x2, 同理可得x_1. 那么问题来了,如何得到x1和x2呢?看起来似乎是个死循环。
这道题的巧妙之处在于利用x1 ^ x2的结果对原数组进行了分组,进而将x1和x2分开了。具体方法则是利用了x1 ^ x2不为0的特性,如果x1 ^ x2不为0,那么x1 ^ x2的结果必然存在某一二进制位不为0(即为1),我们不妨将最低位的1提取出来,由于在这一二进制位上x1和x2必然相异,即x1,x2中相应位一个为0,另一个为1,所以我们可以利用这个最低位的1将x1和x2分开。又由于除了x1和x2之外其他数都是成对出现,故与最低位的1异或时一定会抵消。
【参考答案】
www.jiuzhang.com/solutions/single-number-iii/



作者:程风破浪会有时
链接:http://www.jianshu.com/p/14ef78ed1079
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年6月4日~6日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表