C++ 中的异或操作^
好好的利用异或能够产生奇妙的效果。
异或运算的性质:
不论什么一个数字异或它自己都等于0。也就是说。假设我们从头到尾依次异或数组中的每个数字,那么终于的结果刚好是那个仅仅出现一次的数字。由于那些出现两次的数字所有在异或中抵消掉了。
例题:
给定大小是N的数组,数组里的元素互相不反复,元素的大小范围是1~(N+1)。目标是找出第一个miss的数。要求时间复杂度O(N)。空间是O(1).
由于这个数组总共仅仅有N 个元素,因此在1--N+1中必然有一个数不存在。设res =0, 使用异或操作,先让res和 下标+1 异或,然后同每个数异或。当中出现两次的数刚好异或为0.剩下的则是结果。
<span style="font-size:14px;">// you can also use includes, for example:
// #include <algorithm>
int solution(vector<int> &A) {
// write your code in C++98
int res = 0;
int max = A.size();
if(max==0) {
return 1;
}
for(int i=0;i<A.size();i++) {
res^=(i+1);
if(A[i]<=max) {
res^=A[i];
}
}
return res==0?max+1:res;
}</span>
类似的另外一道题:
题目:一个整型数组里除了两个数字之外。其它的数字都出现了两次。请敲代码找出这两个仅仅出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
答案见: http://zhedahht.blog.163.com/blog/static/2541117420071128950682/
參考文献:
http://www.cnblogs.com/parapax/p/3632255.html
随机推荐
- 紫书 习题 10-22 UVa 10479 (找规律)
			
自己一直在纠结这个串的构造方法 而没有观察串本身的规律-- 2的63次方用 unsigned long long 然后可以发现串是递归构造的. 将串分成1,1,2,4,8,16, 然后会发现s串里面1 ...
 - 彻底解决Linux索引节点(inode)占用率高的告警
			
今天邮箱里发现有一封某服务器inode使用率发生告警的邮件 登录到服务器上df -i查看,发现/路径下91%,磁盘使用率却不高,猜测可能是某个目录下的小文件过多,进而造成inode占用率过高,但不清楚 ...
 - MySQL改变表的存储引擎
			
MySQL提供了多种数据库存储引擎,存储引擎负责MySQL数据库中的数据的存储和提取.不同的存储引擎具有不同的特性,有时可能须要将一个已经存在的表的存储引擎转换成另外的一个存储引擎.有非常多方法能够完 ...
 - [Python] Manage Dependencies with Python Virtual Environments
			
Virtual Environments ensure that dependencies from one Python application don’t overwrite the depend ...
 - SQL Server 为代码减负之存储过程
			
存储过程能够用来提高数据库的查询效率.由于它事先被编译过.被储存于内存中,每次执行前.不必被从新编译,所以效率非常高. 存储过程是一组sql增删改查的集合,假设程序中的一个功能涉及到对数据库的 ...
 - Android实现本地图片选择及预览缩放效果仿春雨医生
			
在做项目时常常会遇到选择本地图片的需求.曾经都是懒得写直接调用系统方法来选择图片.可是这样并不能实现多选效果.近期又遇到了,所以还是写一个demo好了.以后也方便使用.还是首先来看看效果 显示的图片使 ...
 - 18.链表管理内存实现c语言自动释放内存
			
运行截图: 创建记录分配的内存地址大小和地址的结构体 struct MEM { void *p; int size; }; 创建管理内存结构体的链表 typedef struct LinkNode { ...
 - POJ 3172 (认真读题的题)
			
题目: 思路: 题目很有意思 首先 题里说:N<=1000 题里又说 诶呦 woc? 这不自相矛盾嘛 最坏情况也就是个 斐波那契数列 几十个数 暴搜+剪枝不就好了嘛 剪枝:从大往小搜,如果前缀和 ...
 - 虚拟机中试用windows 8(视频)
			
虚拟机中试用windows 8(视频) VM7装windows 8基本没戏,建议用正式版vmware8.0,还有Oracle的Virtualbox 也没问题http://www.virtualbox. ...
 - janos.io
			
http://janos.io/ https://developer.mozilla.org/en-US/Firefox_OS/Developing_Firefox_OS/Porting