篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《程序员代码面试指南》第七章 位运算 在其他数都出现偶数次的数组中找到出现奇数次的数相关的知识,希望对你有一定的参考价值。
题目
在其他数都出现偶数次的数组中找到出现奇数次的数
java代码
package com.lizhouwei.chapter7;
/**
* @Description: 在其他数都出现偶数次的数组中找到出现奇数次的数
* @Author: lizhouwei
* @CreateDate: 2018/4/28 21:02
* @Modify by:
* @ModifyDate:
*/
public class Chapter7_5 {
//在其他数都出现偶数次的数组中找到出现奇数次的数
public int getOnce(int[] arr) {
int once = 0;
for (int i = 0; i < arr.length; i++) {
once = once ^ arr[i];
}
return once;
}
//在其他数都出现偶数次的数组中找到出现奇数次的数
public int getTwo(int[] arr) {
int once = 0;
for (int i = 0; i < arr.length; i++) {
once = once ^ arr[i];
}
int rightOne = once & (~once + 1);//取最左的第一个出现1的位数
int one = once;
for (int i = 0; i < arr.length; i++) {
if ((rightOne & arr[i]) != 0) {
one = one ^ arr[i];
}
}
System.out.print("第一个数:" + one);
System.out.println(";第二个数:" + (once ^ one));
return once;
}
//测试
public static void main(String[] args) {
Chapter7_5 chapter = new Chapter7_5();
int[] arr = {1, 1, 2, 3, 3, 4, 4, 5, 5};
int reslt = chapter.getOnce(arr);
System.out.print("{1,1,2,3,3,4,4,5,5}中");
System.out.println("只出现一次的数为:" + reslt);
int[] arr1 = {1, 1, 2, 3, 3, 4, 5, 5};
System.out.print("{1,1,2,3,3,4,5,5}中");
chapter.getTwo(arr1);
}
}
结果