好好的利用异或能够产生奇妙的效果。

异或运算的性质:

不论什么一个数字异或它自己都等于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

http://blog.csdn.net/caopengcs/article/category/1502799/4

随机推荐

  1. python学习二,字符串常用操作

    字符串可以说是在日常开发中应用最广泛的了,现在来总结下有关python中有关字符串一些常用操作 首先我们声明一个字符串变量 str = "hello world" 下面我们来依次介 ...

  2. BZOJ2690: 字符串游戏(平衡树动态维护Dfs序)

    Description 给定N个仅有a~z组成的字符串ai,每个字符串都有一个权值vi,有M次操作,操作分三种: Cv x v':把第x个字符串的权值修改为v' Cs x a':把第x个字符串修改成a ...

  3. opengl绘制三维人物luweiqi

    素材中有四个.bmp格式的纹理文件和一个.txt的模型参数文件 文件格式说明: 纹理文件数量 纹理文件1(字符串)//.bmp 纹理文件2(字符串) 纹理文件3(字符串) . . . 材质数量 amb ...

  4. tar---打包,解压缩linux的文件和目录

    tar命令可以为linux的文件和目录创建档案.利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar最初被用来在磁带上创建档案,现在,用户可以在 ...

  5. cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁

    1456. [UVa 10881,Piotr's Ants]蚂蚁 ★   输入文件:Ants.in   输出文件:Ants.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述 ...

  6. Oracle HR 例子用户的建立 10g,11g均可

    Oracle HR 例子用户的建立 10g,11g均可 先将附件(见文章尾部)上的 10 个 .sql 文件放入这个路径中 : $ORACLE_HOME/demo/schema/human_resou ...

  7. Linux下VsFTP和ProFTP用户管理高级技巧 之一

    Linux下VsFTP和ProFTP用户管理高级技巧       FTP服务时互联网上比较古老的一种应用,至今Interner应用面非常广泛,但令管理员头痛不已的是其用户管理,既多且杂,如何解决这一问 ...

  8. 分享一个js加密的几种方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. windows10系统window键失灵,没有反应

    今天键盘的的Window键(win键)按了没反应,某度一圈全是它的垃圾营销号文章,没卵用..最后在微软官方社区支持找到解决方案.也建议大家遇到系统问题到微软社区去寻求帮助,毕竟人家是专业. 解决办法 ...

  10. Python爬虫之『urlopen』

    本文以爬取百度首页为示例来学习,python版本为python3.6.7,完整代码会在文章末附上 本次学习所用到的python框架:urllib.request 本次学习所用到的函数: urllib. ...