一道位运算的题目,一串数字,别的都出现了3次只有一个出现2次,要你找到他
2016-07-26 22:09
253 查看
这题目,挺难,我开始想到的解法..是排序…之后再想每一位%3就知道那一位是不是1了,不过这解法略复杂.所以我在网上搜了下别人的解法.下面是我的理解.
运行的截图就是,为了方便理解写了个例子:
int find(int *a, int n) { int one = 0, two = 0 , three=0; for (int i = 0; i < n; i++) { cout << "input " << a[i] << " "; //以下的出现指的都是二进制上每个1的出现 //one存放出现1次的,不在2出现,并且又不在one出现的才统计 //要是one有了,就升级到二,接下来就是2的情况 one ^= a[i] & (~two); cout << "one is " << one<<" "; //two存放出现2次的,要是不在one出现,且不在2出现的统计下来, //要是one出现了,two也出现了就是3, two ^= a[i] & (~one); cout << "two is" << two << " "; //后面这个是举例子的情况,这个three就是统计到目前为止,出现了3次的 //单纯举例子方便理解 three ^= a[i] & (~one)&(~two); cout << "three is" << three << endl; } return two; } int main() { int a[] = { 1,1,4,4,4,3,3,1 }; cout << find(a, 8); }
运行的截图就是,为了方便理解写了个例子:
相关文章推荐
- java-主函数的解释
- python 学习(九) 之 continue语句
- Linux基础之——命令的帮助
- asp.net web api long running task
- 剑指offer 66题 【回溯法】矩阵中的路径
- Apache 安装出现 Failed to open the Windows service manager, perhaps you forgot to log in as Adminstrator
- sudo与visudo的超细用法说明
- 用C++函数指针封装自定义的Button
- HDOJ 1242 Rescue(BFS + 优先队列)
- 中通服的第26天
- for 循环 嵌套练习
- 面试题54:表示数值的字符串
- 第十二章 内存控制块
- HDOJ1016 回溯法
- SQL语法-单行函数
- POJ-3278-Catch That Cow
- 博客园markdown支持测试
- Linux_Java_Linux(CentOS 6.8)下安装JDK
- Windows平台下的内存泄漏检测
- CentOS7.2下Hadoop2.7.2的集群搭建