剑指offer-第六章面试中的各项能力(数组中只出现一次的数字)
题目:输入一个数组,该数组中有两个只出现一次的数字,其他的数字都出现两次,输出出只出现一次的数字。
思路:首先,我们可以将这个数组分成两份,一份里面放一个只出现一次的数字。那么我们该怎么分呢?将整个数组中的数字都异或,那么那些等的数字异或后都化为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-第六章面试中的各项能力(数组中只出现一次的数字)的更多相关文章
- 剑指offer第六章
剑指offer第六章 1.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在数组中出现了4次,所以输出4 分析:思路1 ...
- 【剑指Offer学习】【面试题:二维数组中的查找】PHP实现
最近一直看剑指Offer.里面很多算法题.于是就想着用PHP来显示一下. 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的 ...
- 剑指Offer面试题51(Java版):数组中反复的数字
题目:在一个长度为n的数组里的全部数字都在0到n-1的范围内. 数组中某些数字是反复的,但不知道有几个数字反复了.也不知道每一个数字反复的次数.请找出数组中随意一个反复的数字. 比如假设输入长度为7的 ...
- 剑指Offer面试题29(java版):数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 比如输入一个长度为9的数组{1,2,3,2.2,2.5,4,2}.因为数字2在数组中出现5次,超过数组长度的一半,因此输出2. 解 ...
- 剑指Offer编程题(Java实现)——二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 剑指offer第七章&第八章
剑指offer第七章&第八章 1.把字符串转换成整数 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串 ...
- 剑指offer第五章
剑指offer第五章 1.数组中出现次数超过一半的数 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组 ...
- 剑指offer第四章
剑指offer第四章 1.二叉树的镜像 二叉树的镜像:输入一个二叉树,输出它的镜像 分析:求树的镜像过程其实就是在遍历树的同时,交换非叶结点的左右子结点. 求镜像的过程:先前序遍历这棵树的每个结点,如 ...
- 剑指offer第三章
剑指offer第三章 1.数值的整数次方 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. class Solution { public ...
- LeetCode题解汇总(包括剑指Offer和程序员面试金典,持续更新)
LeetCode题解汇总(持续更新,并将逐步迁移到本博客列表中) LeetCode题解分类汇总(包括剑指Offer和程序员面试金典) 剑指Offer 序号 题目 难度 03 数组中重复的数字 简单 0 ...
随机推荐
- 关于全志A20的Ubuntu12.04 64位系统下环境配置及编译过程笔记【转】
本文转载自:https://blog.csdn.net/buqingbuyuan/article/details/43370199 在安装Ubuntu系统之后,安装编译所需的GCC等工具,一般选用GC ...
- PHP练习题一
目录:1.如何使用php导入导出csv?2.php接收POST数据的方式有哪些?3.如何让json_encode()不转义斜杠?我在做服务器返回一些数据时需要返回一些地址,但是默认的json_code ...
- Gnostice PDFtoolkit VCL的安装
Installation and Uninstallation For New Users Close all open applications including the IDE. Run the ...
- struts2自定义Interceptor拦截器
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- mapreduce&GFS&bigtable learning
之前在学习udf的时候接触到了mapreduce,感觉很酷,于是学习了一下,看了mapreduce和GFS的论文,但是没有总结,只是看了一遍 准备利用在学校的时间,学习一下bigtable,然后再认真 ...
- C++ Primer 第二章 学习笔记
在auto一个引用时,auto会忽略顶层const,而保存底层const decltype(sum()) x = i; // I的类型就是sum()返回值的类型
- Java中Collections.sort()排序详解
public static void main(String[] args) { List<String> list = new ArrayList<String>(); ...
- java模拟http的get和post请求
如题,使用Java模拟GET和POST请求.使用GET可以实现网页抓取,使用POST可以实现对某些网站登录的暴力破解.不过仅是练习,实际意义不大. import java.io.IOException ...
- jquery二维码生成插件jquery.qrcode.js
插件描述:jquery.qrcode.js 是一个能够在客户端生成矩阵二维码QRCode 的jquery插件 ,使用它可以很方便的在页面上生成二维条码. 转载于:http://www.jq22.com ...
- 【Demo】CSS图像拼合技术
图像拼合 图像拼合 - 简单实例 <style> img.home { width: 46px; height: 44px; background: url(/images/img_nav ...