[LintCode] 落单的数 III Single Number III
来源:互联网 发布:电子商务域名 编辑:程序博客网 时间:2024/06/05 11:30
给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字。
样例
给出 [1,2,2,3,4,4,5,3],返回 1和5
挑战
O(n)时间复杂度,O(1)的额外空间复杂度
Given 2*n + 2 numbers, every numbers occurs twice except two, find them.
Example
Given [1,2,2,3,4,4,5,3] return 1 and 5
Challenge
O(n) time, O(1) extra space.
思路:将全部的数异或,最后得到一个数,此数为两个出现一次的数的异或。得到的这个数至少有一位为1,此位可将所有数分为两部分,一部分此位为0,另一部分此位为1,所求的两个数一定分别在两部分中,并且每一部分的个数都是2*m+1,问题就转化为两部分分别求落单的数I,即可两部分分别异或求出两数。
public class Solution { /** * @param A : An integer array * @return : Two integers */ public List<Integer> singleNumberIII(int[] A) { if(null == A || A.length ==0) return null; List<Integer> list = new ArrayList<Integer>(); int x = 0; for(int i = 0; i < A.length; i++) { x ^= A[i]; } int k = 0; while((x % 2) == 0 && k < 32){ k++; x>>=1; } int result1 = 0, result2 = 0; for(int i = 0; i < A.length; i++) { if(((A[i]>>>k) & 1) == 0) { result1 ^= A[i]; }else { result2 ^= A[i]; } } list.add(result1); list.add(result2); return list; }}
0 0
- [LintCode] 落单的数 III Single Number III
- LintCode-落单的数 III
- LintCode:落单的数 III
- lintcode-落单的数 III
- 落单的数 III-LintCode
- lintcode -- 落单的数III
- lintCode-落单的数III
- 84.Single Number III-落单的数 III(中等题)
- lintcode-落单的数III-84
- Lintcode—落单的数III
- LintCode 84. 落单的数III
- 【LintCode】 Single Number 落单的数
- LintCode Single Number、落单的数
- 落单的数 III
- 落单的数 III
- 落单的数 III
- 落单的数III
- 落单的数 III
- LeetCode 250. Count Univalue Subtrees(单值子树)
- 针对IE浏览器单独写CSS样式的几种方法
- 浅谈Eclipse dropins插件安装的"坑"(附m2e的各个版本插件下载)
- java获得当前文件路径
- c++ union(联合体)
- [LintCode] 落单的数 III Single Number III
- 有关广告推荐的一些面试“坑”
- 关于字符编码,中文所占字节的整理。
- window下tomcat内存溢出配置及查看
- 5.3.2 Milter与内容过滤
- Visual Studio Code
- linux下进程绑定cpu情况查看
- 5.4 extract_addr函数:邮件地址解析
- 构造MaxTree