package test;
public class FindNumsAppearOnce {
public void findNumsAppearOnce(int[] nums, int length){
if(nums == null || length<2 ){
return ;
}
int resultExclusiveOR = 0;
for(int i=0; i<length; ++i){
resultExclusiveOR ^= nums[i];
}
int indexOf1 = findFirstBitIs1(resultExclusiveOR);
int num1 =0, num2 = 0;
for(int j=0; j<length; ++j){
if(IsBit1(nums[j],indexOf1)){
num1 ^= nums[j];
}else{
num2 ^= nums[j];
}
}
System.out.println(num1 +"=++="+num2);
}
public int findFirstBitIs1(int num){
int indexBit = 0;
while(((num&1)==0) && indexBit<8 *Integer.SIZE){
num = num>>>1;
++indexBit;
}
return indexBit;
}
public boolean IsBit1(int num, int indexBit){
num = num>>>indexBit;
return (num & 1)==1? true: false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums = {2,4,3,6,3,2,5,5};
int length = nums.length;
FindNumsAppearOnce find = new FindNumsAppearOnce();
find.findNumsAppearOnce(nums, length);
}
}
剑指Offer 40题 数组中只出现一次的数字 Java版
最新推荐文章于 2021-01-13 23:39:54 发布