没有合适的资源?快使用搜索试试~ 我知道了~
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 分析 要解这题需要对异或操作有比较深的理解。 依次将数组中所有元素进行异或得到a,即num1和num2的异或。然后取a中二进制为1的一个位置,找到原数组中所有该位为1的数字进行异或,得到了num1,接下来再将num1与a异或,得到num2。 代码 //num1,num2分别为长度为1的数组。传出参数 //将num1[0],num2[0]设置为返回结果 public class Solution { public void FindNumsAppearOnce(int [] array
资源详情
资源评论
资源推荐
【算法题】数组中只出现一次的数字【算法题】数组中只出现一次的数字
题目描述题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
分析分析
要解这题需要对异或操作有比较深的理解。
依次将数组中所有元素进行异或得到a,即num1和num2的异或。然后取a中二进制为1的一个位置,找到原数组中所有该位为
1的数字进行异或,得到了num1,接下来再将num1与a异或,得到num2。
代码代码
//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
public class Solution {
public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
int a=0,b=0;
for(int i:array) a^=i; // 得到a=num1^num2
int c=1;
while((a&c)==0) c<<=1; // c表示了a中从右开始数第一个1出现的位置,即该位置num1和num2必然是不同的
for(int i:array)
if((c&i) !=0) b^=i; // 只取原数组中该位置为1的元素异或,得到是num1
num1[0]=b;
num2[0]=a^b; // 再次异或num1,相当于a中把num1异或了两次,只剩下b
}
}
Steven_L_
原创文章 19获赞 15访问量 3万+
关注
私信
展开阅读全文
作者:Steven_L_
冷月鱼
- 粉丝: 295
- 资源: 944
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- mybatis中的动态sql, 涉及 where trim set if foreach等
- 简单- 快递运输(Java & JS & Python & C).html
- mybatis框架 更改ems系统,使用动态sql等.zip
- 易语言工具条下拉菜单实现
- Mybatis动态SQL高级映射.zip
- 源码esp8266开发板机智云机智云智能灯
- Python实现多图像转换成连贯的PDF文件,支持所有图片格式,可预览、裁剪、自定义PDF布局、设置图像顺序、PDF质量选择等
- H5腾讯地图选择位置组件
- 基于UCC28019+LM5017电源板硬件(原理图+PCB)工程文件.zip
- 源码esp8266开发板机智云机智云空气净化器
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0