数组中只出现一次的数字
2015-10-31 15:40
204 查看
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
*num1 = *num2 = 0;
if (data.size() < 2)
return;
int s = 0;
for (int i = 0; i < data.size(); ++i)
{
s ^= data[i];
}
int t;
for (t = 0; t < 32; ++t)
if (s & (1<<t))
break;
for (int i = 0; i < data.size(); ++i)
{
if (data[i] & (1<<t))
*num1 ^= data[i];
else
*num2 ^= data[i];
}
}
};
题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字异或的用法:
首先假设在数组中只出现一次的是a和b,那么只要把所有的数异或一次就能得到c=a^b(两个相同的数的异或值为0)由于a!=b所以c中至少有一位为1,所以就选一个为1的位把数组分成两组,那么a和b各占一组,再在各个组中用异或运算就能得到a和b的值了
相关文章推荐
- 内购的步骤
- Maven filter 配置的使用
- Box2D 物理引擎---创建一个简单的模拟物理世界
- 通过rsync工具搭建简单的远程容灾备份系统
- Android Studio安装butterknife插件,让人无语的事情
- loadrunner中切割strtok字符串
- Java SortedMap接口
- Qt动画框架--原创翻译
- 冷备份迁移oracle数据库
- 32位和64位系统的原理
- http与https
- IOS-23-Xcode6.4里UITableView不显示的可能原因及解决办法
- C# progressbar 用法
- MessageBoxButtons.OKCancel的选择事件
- Java Map.Entry接口
- C++的作用域与链接
- JAVA线程与进程间的通信
- 用友2016成都校园招聘笔试题
- Android网络开发之Volley--Volley自定义Request
- Python - BeautifulSoup 安装