【数组9】数组中只出现一次的数字
2016-07-29 19:20
495 查看
题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。更好的方法:
//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
import java.util.*;
public class Solution {
public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
if(array==null ||array.length<2)
return;
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0;i<array.length;i++){
if(!list.contains(array[i])){
list.add(array[i]);
}else{
list.remove(new Integer(array[i]));
}
}
if(list.size()>1){
num1[0]=list.get(0);
num2[0]=list.get(1);
}
}
}
//num1,num2分别为长度为1的数组。传出参数 //将num1[0],num2[0]设置为返回结果 public class Solution { public void FindNumsAppearOnce(int [] nums,int num1[] , int num2[]) { if(nums==null ||nums.length<2) return; //1 对数组中数字依次异或,得到的最后结果即为两个只出现一次数字异或的结果 int result=0; for(int i=0;i<nums.length;i++) result^=nums[i]; int firstIndexOfOne=0 ; while((result & 1)!=1 && firstIndexOfOne<32){ result=result>>1; firstIndexOfOne++; } //2 根据这个位置的数是否为1将数组中的数分为两个数组 num1[0]=0; num2[0]=0; for(int i=0;i<nums.length;i++){ // nums[i]=nums[i]>>firstIndexOfOne; if(isBitOne(nums[i],firstIndexOfOne) ) { num1[0]^=nums[i]; }else{ num2[0]^=nums[i]; } } } private boolean isBitOne(int num,int firstIndexOfOne){ num=num>>firstIndexOfOne; return ((num & 1)==1)?true:false; } }
相关文章推荐
- Android开源:网络框架volley使用
- 三、生成器模式Builder(创建型)
- 陈老师撕B志玲姐姐的热门微博数据分析
- 顺序表应用6:有序顺序表查询
- 常见的运行时异常
- NVIDIA GPU的Compute Capability一览
- 一看就懂的ReactJs入门教程(精华版)
- 【HDU】1160 - FatMouse's Speed(dp & 栈)
- POJ3061-Subsequence
- 一个不成熟的编程员,写写 js 的面向对象
- word文档中查找和替换空格符和回车符
- 二、抽象工厂模式Abstract Factory(创建型)
- ios 设置字体家族
- C++11:基于std::queue和std::mutex构建一个线程安全的队列
- 华为在线训练(5)
- 图片轮番
- Codeforces 204B Little Elephant and Cards
- 淘宝放大镜效果
- Linux下使用Vi时方向键变乱码、删除键不能使用的解决方法(亲测有效)
- hive创建表失败,drop表失败