题目:输入一个数组,该数组中有两个只出现一次的数字,其他的数字都出现两次,输出出只出现一次的数字。

思路:首先,我们可以将这个数组分成两份,一份里面放一个只出现一次的数字。那么我们该怎么分呢?将整个数组中的数字都异或,那么那些等的数字异或后都化为0,因此最后出现的不为0的数字就是两个只出现一次的数字他们两个异或的结果。我们找到该结果中的最右边的一个1,然后根据这个1将数组划分为两份。

Java代码:

//数组中只出现一次的数。
//题目:数组中其他的数都是出现两次,有两个数只出现一次。
public class OnlyTimeApprance {
public void findOneTimeAppranceOfArr(int[] a){
int resultExclusiveOr1=0;
int resultExclusiveOr2=0;
if(a==null||a.length<2)
return;
int resultExclusiveOr=0;//用来表示整个数组异或后的结果
for(int i=0;i<a.length;i++){
resultExclusiveOr^=a[i];
}
int indexOf1=firstRightOne(resultExclusiveOr);
for(int i=0;i<a.length;i++){
if(isBit1(a[i],indexOf1))
resultExclusiveOr1^=a[i];
else
resultExclusiveOr2^=a[i];
} System.out.println(resultExclusiveOr1+" "+resultExclusiveOr2); } public boolean isBit1(int i, int indexOf1) {
i=i>>indexOf1;
if((i&1)==0)
return false;
return true ;
} public int firstRightOne(int resultExclusiveOr) {
int indexBit1=0;
while((resultExclusiveOr&1)==0){
resultExclusiveOr=resultExclusiveOr>>1;
indexBit1++;
}
return indexBit1;
}
public static void main(String[] args){
int[] a={2,3,3,4,4,5,5,6};
OnlyTimeApprance ota=new OnlyTimeApprance();
ota.findOneTimeAppranceOfArr(a);
}
}

剑指offer-第六章面试中的各项能力(数组中只出现一次的数字)的更多相关文章

  1. 剑指offer第六章

    剑指offer第六章 1.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在数组中出现了4次,所以输出4 分析:思路1 ...

  2. 【剑指Offer学习】【面试题:二维数组中的查找】PHP实现

    最近一直看剑指Offer.里面很多算法题.于是就想着用PHP来显示一下. 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的 ...

  3. 剑指Offer面试题51(Java版):数组中反复的数字

    题目:在一个长度为n的数组里的全部数字都在0到n-1的范围内. 数组中某些数字是反复的,但不知道有几个数字反复了.也不知道每一个数字反复的次数.请找出数组中随意一个反复的数字. 比如假设输入长度为7的 ...

  4. 剑指Offer面试题29(java版):数组中出现次数超过一半的数字

    题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 比如输入一个长度为9的数组{1,2,3,2.2,2.5,4,2}.因为数字2在数组中出现5次,超过数组长度的一半,因此输出2. 解 ...

  5. 剑指Offer编程题(Java实现)——二维数组中的查找

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  6. 剑指offer第七章&第八章

    剑指offer第七章&第八章 1.把字符串转换成整数 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串 ...

  7. 剑指offer第五章

    剑指offer第五章 1.数组中出现次数超过一半的数 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组 ...

  8. 剑指offer第四章

    剑指offer第四章 1.二叉树的镜像 二叉树的镜像:输入一个二叉树,输出它的镜像 分析:求树的镜像过程其实就是在遍历树的同时,交换非叶结点的左右子结点. 求镜像的过程:先前序遍历这棵树的每个结点,如 ...

  9. 剑指offer第三章

    剑指offer第三章 1.数值的整数次方 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. class Solution { public ...

  10. LeetCode题解汇总(包括剑指Offer和程序员面试金典,持续更新)

    LeetCode题解汇总(持续更新,并将逐步迁移到本博客列表中) LeetCode题解分类汇总(包括剑指Offer和程序员面试金典) 剑指Offer 序号 题目 难度 03 数组中重复的数字 简单 0 ...

随机推荐

  1. oracle 中 dual 详解

    基本上oracle引入dual为的就是符合语法1. 我们先从名称来说,dual不是缩写词,本身就是完整的单词.dual名词意思是对数,做形容词时是指二重的,二元的.2. Oracle中的dual表是一 ...

  2. Your app uses or references the following non-public APIs的解决方案

    之前接了一个旧的项目,代码混乱,年代久远,不得不吐槽一波,好不容易改完需求提交代码,说用到了non-public APIs,搞了好久终于找到地方了,下面是我的解决过程,让大家少走弯路: 下面的被驳回的 ...

  3. ubuntu 支持中文

    1.cat /usr/share/i18n/SUPPORTED 说明:查看系统支持的字符集,你需要注意的是支持字符集的格式,如对中文会有以下一些显示(我的系统如此,我不知是否普遍) zh_CN.GB1 ...

  4. CodeChef CHEFSOC2 Chef and Big Soccer 水dp

    Chef and Big Soccer   Problem code: CHEFSOC2 Tweet     ALL SUBMISSIONS All submissions for this prob ...

  5. hdu 5719 Arrange 贪心

    Arrange Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Proble ...

  6. HttpClient示例01

    1.要使用 HttpClient 需要下载 Apache的相关包 我这里下载的是 httpcomponents-client-4.5.2-bin.zip.httpcomponents-client-4 ...

  7. 资源(GitHub)

    angular 文档 https://angular.cn/docs/ts/latest/quickstart.html   http://sc.qq.com/fx/u?r=OfFE5AA ios h ...

  8. zoj3195倍增lca

    求三点之间的最短路,,分别求两点之间的lca除2即可(代码写的太挫了,wa了14发= =) #include<map> #include<set> #include<cm ...

  9. 【总结】对异步处理的http接口进行性能测试

    以前对接口做性能测试,接口都是同步处理的,请求之后等待响应结果就知道处理结果了,这样只要看这个接口是否异常,如果无异常无报错记录这个接口的响应时间.TPS等性能指标进行分析就可以了,最近在工作中遇到了 ...

  10. 通过 HTTP 请求加载远程数据(ajax,axios)

    1.http://blog.csdn.net/liaoxiaojuan233/article/details/54176798 (Axios(JS HTTP库/Ajax库)) 2.https://ww ...