落单的数算法(巧妙的异或运算)
来源:互联网 发布:知乎日报在哪 手机 编辑:程序博客网 时间:2024/06/11 03:52
问题描述:
进阶:假设两个不同的数是a和b,并且a!=b,将2n+2个数异或起来就会得到c=a xor b,并且c不等于0。因此在c的二进制位中找到一个为1的位,可推断在这位上a和b分别为0和1,因此将2n+2个数分为该位位0的组和该位为1的组,两组中各自会包含2n’+1个数和2n’’+1个数,用初阶的算法即可解决。
有2n+1个数,其中2n个数两两成对,1个数落单,找出这个数。要求O(n)的时间复杂度,O(1)的空间复杂度。
进阶问题:如果有2n+2个数,其中有2个数落单,该怎么办?
Java 实现:
public class Tst {public static void main(String[] args) {int arr[] = {1,2,3,2,1};int ret = 0;for(int i=0;i<5;i++){ret^=arr[i];}System.out.println(ret);}}
进阶:假设两个不同的数是a和b,并且a!=b,将2n+2个数异或起来就会得到c=a xor b,并且c不等于0。因此在c的二进制位中找到一个为1的位,可推断在这位上a和b分别为0和1,因此将2n+2个数分为该位位0的组和该位为1的组,两组中各自会包含2n’+1个数和2n’’+1个数,用初阶的算法即可解决。
0 0
- 落单的数算法(巧妙的异或运算)
- 落单的数(落单的数 & 落单的数 II & 落单的数 III)
- 异或运算符的巧妙应用
- 算法题:lintcode#82 落单的数(java)
- 落单的数
- LinCode落单的数
- 落单的数
- 题目:落单的数
- 落单的数 III
- 落单的数 II
- 落单的数
- 落单的数
- LinCode落单的数
- LintCode_82_落单的数
- lintcode ----落单的数
- LintCode 落单的数
- 落单的数
- 落单的数II
- jmeter笔记9_正则表达式提取器
- PHP程序在浏览器中文乱码问题
- Linux多线程同步的几种方式
- 函数默认形参
- Android App接入微信开放平台注意事项
- 落单的数算法(巧妙的异或运算)
- oracle数据导入导出之exp imp
- Git .常用命令图解 (转)
- mysqlhotcopy
- 使用Ajax以及Jquery.form异步上传图片
- iOS已发布应用中对异常信息捕获和处理
- 将Excel导入DataGridView
- 运算符*和指针以及前++、后++总结
- 修改属性页CPropertyPage标题