博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用异或解题 —— 序列中仅出现一次的两个数
阅读量:5010 次
发布时间:2019-06-12

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

  • 如果一个序列除了某个数出现一次(奇数次)外,其他数均出现两次(偶数次),最终全部异或的结果会是这个出现一次(奇数次)的数;

  • 如果一个序列所有的数均出现两次(偶数次),最终全部异或的结果会是 0;

  • 如果一个序列除了某 2 个数出现一次(奇数次)外,其他数均出现两次(偶数次),最终全部异或的结果一定不为 0;

class Solution{public:    void FindNumsAppearOdds(vector
nums, int *num1, int *num2){ if (nums.size() < 2) return; int myxor = accumulate(nums.begin(), nums.end(), 0, [](int x, int y) { return x^y; }); int flag = 1; while ((myxor & flag) == 0) flag <<= 1; *num1 = myxor; *num2 = myxor; for (int i = 0; i < nums.size(); ++i) if (flag & nums[i]) *num1 ^= nums[i]; else *num2 ^= nums[i]; }}

转载于:https://www.cnblogs.com/mtcnn/p/9423637.html

你可能感兴趣的文章
MVC AJAX
查看>>
Google Map API V3开发(6) 代码
查看>>
Kafka初入门简单配置与使用
查看>>
第三章Git使用入门
查看>>
Amd,Cmd, Commonjs, ES6 import/export的异同点
查看>>
cocos2dx-Lua与Java通讯机制
查看>>
上下文管理器之__enter__和__exit__
查看>>
android3.2以上切屏禁止onCreate()
查看>>
winform文件迁移工具
查看>>
delphi DCC32命令行方式编译delphi工程源码
查看>>
paip.输入法编程----删除双字词简拼
查看>>
or1200下raw-os学习(任务篇)
查看>>
ZOJ - 3939 The Lucky Week(日期循环节+思维)
查看>>
小花梨的取石子游戏(思维)
查看>>
Ubuntu 18.04安装arm-linux-gcc交叉编译器
查看>>
.net core i上 K8S(一)集群搭建
查看>>
django drf 深入ModelSerializer
查看>>
Android---Menu菜单
查看>>
【资源导航】我所用到过的工具及下载地址
查看>>
监控Tomcat
查看>>