You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

238 lines
5.7 KiB

package leo.class01_02;
/**
* @author Leo
* @ClassName EvenTimesOddTimes
* @DATE 2020/11/13 3:34 下午
* @Description
*/
public class EvenTimesOddTimes {
/**
* 功能描述 : 取出唯一一个出现奇数次的数字
* @author Leo
* @date 2020/11/13 4:28 下午
* @param arr
* @throw
* @return void
*/
public static void printOdd(int[] arr) {
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
System.out.println(eor);
}
public static void printOdd1(int[] arr) {
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
System.out.println(eor);
}
public static void printOdd2(int[] arr) {
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
System.out.println(eor);
}
public static void printOdd3(int[] arr) {
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
System.out.println(eor);
}
public static void printOdd4(int[] arr) {
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
System.out.println(eor);
}
public static void printOdd5(int[] arr) {
int eor = 0;
for (int num : arr) {
eor ^= num;
}
System.out.println(eor);
}
public static void printOdd6(int[] arr) {
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
System.out.println(eor);
}
public static void printOdd7(int[] arr) {
int eor = 0;
for (int num : arr) {
eor ^= num;
}
System.out.println(eor);
}
/**
* 功能描述 : 有两种数出现了奇数次,找出他
* @author Leo
* @date 2020/11/14 4:21 下午
* @param arr
* @throw
* @return void
*/
public static void printOddTwo(int[] arr) {
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
int rightOnly = eor & (-eor);
int eorOther = 0;
for (int i = 0; i < arr.length; i++) {
if ((rightOnly & arr[i]) != 0) {
eorOther ^= arr[i];
}
}
System.out.println(eorOther + " " + (eor ^ eorOther));
}
public static void printOddTwo2(int[] arr) {
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
int rightOne = eor & (-eor);
int eorOther = 0;
for (int i = 0; i < arr.length; i++) {
if ((rightOne & arr[i]) != 0) {
eorOther ^= arr[i];
}
}
System.out.println(eorOther + " " + (eor ^ eorOther));
}
public static void printOddTwo3(int[] arr) {
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
int rightOnly = eor & (-eor);
int eorOther = 0;
for (int i = 0; i < arr.length; i++) {
if ((rightOnly & arr[i]) != 0) {
eorOther ^= arr[i];
}
}
System.out.println(eorOther + " " + (eor ^ eorOther));
}
public static void printOddTwo4(int[] arr) {
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
int rightOne = eor & (-eor);
int eorOther = 0;
for (int i = 0; i < arr.length; i++) {
if ((rightOne & arr[i]) != 0) {
eorOther ^= arr[i];
}
}
System.out.println(eorOther + " " + (eor ^ eorOther));
}
public static void printOddTwo5(int[] arr) {
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
int rightOne = eor & (-eor);
int eorOther = 0;
for (int i = 0; i < arr.length; i++) {
if ((rightOne & arr[i]) != 0) {
eorOther ^= arr[i];
}
}
System.out.println(eorOther + " " + (eor ^ eorOther));
}
public static void printOddTwo6(int[] arr) {
int eor = 0;
for (int num : arr) {
eor ^= num;
}
//找出最右侧出现1的位置
int rightOne = eor & (-eor);
int eorOther = 0;
for (int num : arr) {
if ((rightOne & num) != 0) {
eorOther ^= num;
}
}
System.out.println(eorOther + " " + (eor ^ eorOther));
}
public static void printOddTwo7(int[] arr) {
if (arr.length == 0) {
System.out.println("arr length is zero");
}
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
int rightOne = eor & (-eor);
int eorOther = 0;
for (int num : arr) {
if ((rightOne & num )!= 0) {
eorOther ^= num;
}
}
System.out.println(eorOther+" "+(eor^eorOther));
}
public static void printOddTwo8(int[] arr) {
int eor = 0;
for (int num : arr) {
eor ^= num;
}
int rightOne = eor & (-eor);
int anotherEor = 0;
for (int num : arr) {
if ((rightOne & num) != 0) {
anotherEor ^= num;
}
}
System.out.println(anotherEor + " " + (eor ^ anotherEor));
}
public static void main(String[] args){
int[] arrOne = {1, 1, 5, 5, 8, 1, 8, 5, 5};
printOdd7(arrOne);
int[] arrTwo = {1, 1, 9, 5, 5, 8, 1, 8, 9, 5, 5, 5};
printOddTwo8(arrTwo);
}
}