数组中只出现一次的数字
来源:互联网 发布:朝勇投资有限公司 知乎 编辑:程序博客网 时间:2024/06/14 07:24
整个数组中只有两个数字各出现了一次,其余数字都出现了两次
刚拿到题时可能没有思路,如果是数组中只有一个数字出现一次,其余数字都出现两次,如何求这一个只出现一次的数字呢
我们想到异或的方法,相同为0,相异为1,通过将数组整体异或,就能得到只出现一次的数字
想到这,如果我们把两个只出现一次的数字分别分到两个不同 的数组中,再分别对这两个数组用异或的方法就能找出两个只出现一次i的数字了
同时我们知道,只要数组中只出现一次的数字不相同(也必然不同),那么那两个数肯定有一位是不同的,我们用位操作将这个不同位找出来,任意找出这两个不同位中的任意一位即可,找出来后,,根据相同的两个数字,在该位表现都相同,就能根据if条件区分成两个数组,分成两个数组后,也就能找出两个数字
void findNumsAppearOnec(int data[],int length,int *num1,int *num2)
{
if(data == NULL || length <= 0)
return ;
int temp = 0;
for(int i = 0;i != length;++i)
temp ^= data[i];//异或的方法,将两只出现一次的数字先找出来,找出来的结果是这两数异或的结果
temp ^= (temp & (temp - 1));//找出两个只出现一次的数字中不相同的一位,,本例找的是最后一位
*num1 = *num2 = 0;
for(int i = 0;i != length;++i)
if(data[i] & temp)//根据这个条件,其实不用另外分配空间
*num1 ^= data[i];
else *num2 ^= data[i];
}
*num1 *num2就是要找的数字
0 0
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- SQL优化避免索引失效
- Mybatis中tinyint(1)数据自动转化为boolean处理
- 学习版本控制工具 git的基本使用
- 坚持#第37天~Java开发大数据实时统计系统
- 关于Integer对象的一些小知识
- 数组中只出现一次的数字
- repo切换xml命令
- 线性顺序存储结构
- cordova打开pdf连接没反应:transferred with MIME type application/pdf: "http://**/**.pdf"
- Cookie和Session的区别
- 网络令牌的解释
- 周三项目4--顺序表应用
- 编译和解释的区别是什么?来看看
- 初学java,对3+1层架构的一些简单理解:MVC+S