面试题single number
来源:互联网 发布:tophat算法 编辑:程序博客网 时间:2024/06/01 07:35
leetcode原题:Given an array of integers, every element appears twice except for one. Find that single one.
为什么答案是result=0^a[0]^a[1]......^a[n-1]?
答:无论按照什么顺序将a[]中的数字异或,对于二进制表示的result中的每一位,a[]中成对出现的数字总会让该位翻转相同的两次,这两次的结果和对这一位的贡献是0,然后0^x=x,不影响其他数字异或时对该位的贡献。最终result中的每一位上只剩那个没有人和它配对成功的single number了。
其根本原因在于对result中的任何一位,a[]中的哪个数字来翻转(无论谁的1或者0过来求异或和)都是等价的,没有权重。假如给a[]中的每个数字标记一种颜色,那result的最终结果里的比特们一定是花花绿绿的。
推广:
照这么理解,这个方法还是下面这题的最优解:
一个数组中,只有一个数字出现了奇数次,其他都出现了偶数次。找出这个出现奇数次的数字。O(n)时间,O(1)空间。
另外,由于等价性,这种”记忆“本领只能记住奇次或偶次。如果把这种”记忆“本领推广,异或运算也相应推广,比如一个比特能有三个状态,这个解法就可以解:
数组A中,一个数字a出现了3n+1次,又有一个数字b出现了3n+2次,其他的数字都出现了3n次,找出这单个a与单个b的异或和。
更多的状态依此类推。
后面这段纯属直觉,如有不对还望指正。
0 0
- 面试题single number
- Leetcode Single Number II (面试题推荐)
- Single Number 谷歌面试题
- 代码面试题:Majority Number
- Single Number
- single number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Single Number
- Huffman Codes
- maven之简单解析
- 动态检查网络状态
- day09_面向对象(继承+抽象+接口)
- 第六章 图 (思维导图)
- 面试题single number
- 执行ssh-add时出现Could not open a connection to your authentication agent
- Linux之locate命令详解
- C# 与 C 分别实现最简单的tcp-modbus 通信测试 (func_code = 0x03)
- 【java基础】键盘键入内容
- onethink后台添加自定义菜单不显示的解决方法(转)
- 逆序对之树形数组与归并排序
- 接口
- Ubuntu 14.10 搭建nfs服务器