一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
来源:互联网 发布:ntp校时服务器端口 编辑:程序博客网 时间:2024/04/30 12:53
class
Solution {
public
:
void
FindNumsAppearOnce(vector<
int
> data,
int
* num1,
int
*num2) {
if
(data.size()<2)
return
;
int
size=data.size();
int
temp=data[0];
for
(
int
i=1;i<size;i++)
temp=temp^data[i];
if
(temp==0)
return
;
int
index=0;
while
((temp&1)==0){
temp=temp>>1;
++index;
}
*num1=*num2=0;
for
(
int
i=0;i<size;i++)
{
if
(IsBit(data[i],index))
*num1^=data[i];
else
*num2^=data[i];
}
}
bool
IsBit(
int
num,
int
index)
{
num=num>>index;
return
(num&1);
}
};
可以用位运算实现,如果将所有所有数字相异或,则最后的结果肯定是那两个只出现一次的数字异或
的结果,所以根据异或的结果1所在的最低位,把数字分成两半,每一半里都还有只出现一次的数据和成对出现的数据
这样继续对每一半相异或则可以分别求出两个只出现一次的数字
或者:
class
Solution {
public
:
void
FindNumsAppearOnce(vector<
int
> data,
int
* num1,
int
*num2) {
if
(data.size() < 2)
return
;
int
myxor = 0;
int
flag = 1;
for
(
int
i = 0 ; i < data.size(); ++ i )
myxor ^= data[i];
while
((myxor & flag) == 0) flag <<= 1;
*num1 = myxor;
*num2 = myxor;
for
(
int
i = 0; i < data.size(); ++ i ){
if
((flag & data[i]) == 0) *num2 ^= data[i];
else
*num1 ^= data[i];
}
}
};
0 0
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。 请写程序找出这两个只出现一次的数字。
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次,请写程序找出这两个只出现一次的数字
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次,请写程序找出这两个出现一次的数字
- 一个整型数组里除了两个数字之外,其它的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- 一个整型数组里除了两个不同数字之外,其它的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。 请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n), 空间复杂度是O(1)
- 算法习题61:找出数组中两个只出现一次的数字:一个整型数组里除了两个数字之外,其他的数字都出现了两次
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。查出其他两个只出现一次的数
- void main()还是int main()
- jar包名重复报错
- Swift Release模式下屏蔽NSLog()
- C++ 128位 AES加密算法
- OpenDaylight安装使用
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- 对青蛙过河问题以及hanoi塔的思考
- Mongoose学习参考文档——基础篇
- iOS开发-swift基础学习一
- php连接mysql类PDO从php5才开始有
- android中下载加速
- 求满足条件的行数据相减求差值问题
- Error when loading the SDK
- 制作Ubuntu deb包的三种方法