找出数组中唯二出现一次的数
来源:互联网 发布:手机能安装windows xp 编辑:程序博客网 时间:2024/05/22 06:17
原题取自https://leetcode.com/problems/single-number-iii/?tab=Description
题目要求找出数组中唯二出现一次的数,其余数均只出现两次。 要求做到算法的时间复杂度为O(n)
解题最直接的方法是计算出数组中每个数出现的次数,然后取其中出现一次的,但其算法复杂度不满足题目要求
这里采用异或计算的方法来求解
由于 A ^A = 0,,A ^ 0 = A,
假设A、B就是题解,则 temp1 = A ^ B,
在二进制下,temp1的每一位1表示A和B在该位不相同,我们利用temp1中的第一位1将数组分成两组,一组包含A,而另一组包含B
最后对每组数进行异或计算求出A,B
代码如下:
temp1 -1 表示将temp1从最后一位到第一位1为止按位取反,假设这个1在第k位,
则temp1 & (temp1 - 1) 表示一个第k位为0,其余位与temp1相同的数
再与temp1进行异或计算,由于temp1在第k为1,
temp2 = b000……010……0,除了第k位为1外其余位均为0
利用temp2将数组分成第k为0和1的两组便可得出答案
我的代码在网站上的测试结果
0 0
- 找出数组中唯二出现一次的数
- 找出数组中出现一次的数
- 数组------找出数组中只出现一次的两个数
- 找出数组中两个只出现一次的数
- 找出数组中唯一出现一次的数
- 找出一个数组中只出现一次的数
- 找出数组中只出现一次的数(single number )
- 找出数组中两个只出现了一次的数
- 在给定数组中找出只出现一次的数
- 整数数组中找出只出现了一次的数
- 找出数组中只出现一次的两个数
- 找出一个数组中只出现一次的两个数
- 数组中,一个数出现一次,其余的数都出现2次,找出那个出现一次的数
- 给定一个数组 AA,除了一个数出现一次之外,其余数都出现三次。找出出现一次的数。
- 找出数组中出现一次的三个数,其他数都出现两次
- 数组中只有一个数出现一次,其他数都出现两次,如何找出只出现一次的那个
- 找出只出现一次的两个数
- 找出两个只出现一次的数
- JAVA 控制流程之分支语句 (if -else)
- 《挑战》读书笔记(一)
- BIO与NIO、AIO的区别(这个容易理解)
- 文本文件与二进制文件区别
- 皮皮java笔记——Statement、ResultSet
- 找出数组中唯二出现一次的数
- Leetcode_Array_Max Consecutive Ones
- POJ1611 The Suspects 种类并查集
- Linux vim安装YouCompleteMe插件
- 【HDU】6016
- 文章标题
- SwaggerUI ASP.Net WebAPI2
- 自学笔记二:C#语法基础 数据类型之值类型
- 消除HTML网页顶部的一行空白方法(火狐显示正常,谷歌head与body之间有未知代码)