两种方式找出数组中只出现一次的数字
来源:互联网 发布:gjb软件版本说明 编辑:程序博客网 时间:2024/06/05 18:46
题目描述:(剑指offer)
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
例 输入:
{1,9,7,1,2,2,3,4,5,4,5,6,7,8,8,9}
输出:
num1[0] =3
num2[0]=6‘
思路1:(借用HashSet的没有重复特性)
step1、创建一个HashSet
step2、遍历数组,HashSet中没有出现过的放入;出现过的,直接删除
step3、HashSet中剩下的两个就是这两个数
step2、遍历数组,HashSet中没有出现过的放入;出现过的,直接删除
step3、HashSet中剩下的两个就是这两个数
public class FindNumsAppearOnce { public static void FindNumsAppearOnce1(int [] array,int num1[] , int num2[]) { Setit = new HashSet (); for(int i : array) { if(!it.add(i)) //没有出现过的放入,出现的,直接删除 it.remove(i); } Integer result[]=new Integer[it.size()]; it.toArray(result); num1[0] = result[0]; num2[0] = result[1]; }
思路2: (异或性质——数与自身异或为0,与0异或为自己)
step1、由于其它数字都是成双,所以所有数全部异或在一起,则得到这两个不同数的异或结果。取第一个1为标志位
step2、 这个标志的1,必须是:这两个数在该位必须一个为0,一个为1
step3、这样可以将数组分为两组,一组在该标志位为1,一组在该标志位为0,这两个不同数字分别在这两组内
step4、将两组内的数分别异或,得到两个结果则为这两个不同的数
step1、由于其它数字都是成双,所以所有数全部异或在一起,则得到这两个不同数的异或结果。取第一个1为标志位
step2、 这个标志的1,必须是:这两个数在该位必须一个为0,一个为1
step3、这样可以将数组分为两组,一组在该标志位为1,一组在该标志位为0,这两个不同数字分别在这两组内
step4、将两组内的数分别异或,得到两个结果则为这两个不同的数
public class FindNumsAppearOnce2 {public static void FindNumsAppearOnce1(int [] array,int num1[] , int num2[]){int num = 0;for(int i : array) //全部亦或,得到两个不同数的标志位num^=i;int count = 0;for(; count!= array.length; count++) //取出第一个1标志位{if((num & (1<
思路1:(借用HashSet的没有重复特性)
step1、创建一个HashSet
step2、遍历数组,HashSet中没有出现过的放入;出现过的,直接删除
step3、HashSet中剩下的两个就是这两个数
step2、遍历数组,HashSet中没有出现过的放入;出现过的,直接删除
step3、HashSet中剩下的两个就是这两个数
思路2: (异或性质——数与自身异或为0,与0异或为自己)
step1、由于其它数字都是成双,所以所有数全部异或在一起,则得到这两个不同数的异或结果。取第一个1为标志位
step2、 这个标志的1,必须是:这两个数在该位必须一个为0,一个为1
step3、这样可以将数组分为两组,一组在该标志位为1,一组在该标志位为0,这两个不同数字分别在这两组内
step4、将两组内的数分别异或,得到两个结果则为这两个不同的数
step1、由于其它数字都是成双,所以所有数全部异或在一起,则得到这两个不同数的异或结果。取第一个1为标志位
step2、 这个标志的1,必须是:这两个数在该位必须一个为0,一个为1
step3、这样可以将数组分为两组,一组在该标志位为1,一组在该标志位为0,这两个不同数字分别在这两组内
step4、将两组内的数分别异或,得到两个结果则为这两个不同的数
0 0
- 两种方式找出数组中只出现一次的数字
- 找出数组中出现次数最多的数字&找出数组中只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字--总结
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 设置viewpager的当前页居中,两侧的页面显示一点
- 【GDOI2017第二轮模拟day1】最长路径
- 项目笔记4
- Java链表基础(1)
- SQL延伸2-行列互换
- 两种方式找出数组中只出现一次的数字
- Crossing River
- 正则表达式中的贪婪与非贪婪模式
- JS实现全选、全不选的email效果
- fragment 向所属的activity传值的时候
- 输出和输入中%*c或者%*s有什么作用
- 【Unity3D】对话框、隐藏与显示、拖拽
- 8皇后问题的传统解决方法
- 书本整理