题目:

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

分析:

我们知道,两个相同的数字异或的结果等于0,所以利用这个性质将数组中所有的数字异或,求得的结果,就是两个只出现一次数字异或的结果。而且这两个数字异或的结果肯定不为0,或者说结果数字二进制表示一定有一位为1,我们以第一个为1的位置作为区分数组中数字的条件,这样便能将两个数字分到两个数组中,再分别异或每一个数组中的数字,最后的结果便是这两个只出现了一次的数字。

程序:

C++

class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
if(data.size() == )
return;
int flag = data[];
for(int i = ; i < data.size(); ++i){
flag ^= data[i];
}
int d = ;
while((flag & d) == ){
d = d << ;
}
*num1 = *num2 = ;
for(int i = ; i < data.size(); ++i){
if((data[i] & d) != ){
*num1 ^= data[i];
}
else{
*num2 ^= data[i];
}
}
}
};

Java

//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
public class Solution {
public void FindNumsAppearOnce(int [] array, int num1[] ,int num2[]) {
if(array == null || array.length == 0)
return;
int flag = 0;
for(int i : array)
flag ^= i;
int d = 1;
while((flag & d) == 0) {
d = d << 1;
}
for(int i : array) {
if((i & d) == 0) {
num1[0] ^= i;
}
else {
num2[0] ^= i;
}
}
}
}

最新文章

  1. ASP.NET之纠错
  2. WPF面试准备
  3. C++中数据对齐
  4. JQ动画的简单介绍
  5. Android消息机制入门
  6. PHP扩展Redis编译安装
  7. cogs 线型网络(状压dp)
  8. Linux程序设计学习笔记----多线程编程线程同步机制之相互排斥量(锁)与读写锁
  9. 【解题报告】VijosP1448校门外的树(困难版)
  10. python从入门到实践-10章文件和异常(括号问题)
  11. Go基础系列:简单数据类型
  12. 实现wc部分功能 java
  13. python--smtp邮件使用
  14. 【Mybatis】MyBatis配置文件的使用(二)
  15. 转:35个让人惊讶的 CSS3 动画效果演示
  16. OAuth2.0网页授权 提示未关注该测试号
  17. laravel服务l队列资料整理
  18. 机器学习--Gradient Boosting Machine(GBM)调参方法详解
  19. Python基础系列讲解—动态类型语言的特点
  20. 关于ASP.NET MVC的Html.BeginForm()方法

热门文章

  1. 探究UE4网络系列(二)、UE4网络核心类分析
  2. HttpRunner学习5--使用variables声明变量
  3. Python基础-day01-3
  4. CouchDB学习一
  5. Python--合并2个字典成1个新字典的9种方法
  6. 升鲜宝V2.0_生鲜配送管理系统_杭州生鲜配送行业,升鲜宝使用教程 客户管理 第二章
  7. 百度大脑IOCR财会票据识别技术接入小程序,快速实现财会票据识别
  8. MYSQL 游标学习及使用实例
  9. 面试连环炮系列(一):如何保证Redis高可用和高并发
  10. 可编程实验板EPM1270T144C5蜂鸣器音调频率选择