2n+1个数中有2n个数出现过两次,找出其中只出现一次的数
程序员文章站
2024-03-16 18:11:16
...
public static void main(String[] args) {
// 数字6只出现一次
int[] arr = {5, 7, 12, 34, 20, 7, 20, 6, 12, 5, 34};
int size = arr.length;
int k = 0;
for (int i = 0 ; i < size; i++) {
k ^= arr[i];
}
System.out.println(k);
}
原理 异或
相同为0
相异为1
任何数与0异或的结果仍是自身
交错正负数
public class MyMain {
public static void main(String[] args) {
int[] arr = {-2, 34, 88, -33, -45, 2, 70, -56};
stepA(arr);
stepB(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + ",");
}
}
// 排序 负数在前正数在后 类似简单选择排序
public static void stepA(int[] array) {
int size = array.length;
int out;
int in;
for (out = 0; out < size -1 ; out++) {
for (in = out + 1; in < size; in++) {
if (array[in] < 0) {
array[out] = array[in] ^ array[out];
array[in] = array[out] ^ array[in];
array[out] = array[out] ^ array[in];
break;
}
}
}
}
// 头尾交换
public static void stepB(int[] array) {
int size = array.length;
for (int i = 1; i< size / 2;) {
array[i] = array[i] ^ array[size - 1 - i];
array[size - 1 - i] = array[i] ^ array[size - 1 - i];
array[i] = array[i] ^ array[size - 1 - i];
i = i + 2; // 步长
}
}
}
判断一组数中是否存在某个数
public static void main(String[] args) {
int[] arr = {5, 17, 122, 304, 20, 7, 20, 6, 12, 5, 34};
int size = arr.length;
// 待匹配数字
int k = 12;
for (int i = 0 ; i < size; i++) {
if ((k ^ arr[i]) == 0) {
System.out.println("匹配成功");
break;
}
}
}
原理 异或
相同为0
相异为1
推荐阅读
-
2n+1个数中有2n个数出现过两次,找出其中只出现一次的数
-
给定一个非空整数数组,除了某个元素只出现一次之外,其余的都出现两次,找出只出现一次的那个数字
-
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次, 找出这两个只出现一次的数字。
-
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
-
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
-
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。...
-
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
-
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
-
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
-
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。