找出数组中只出现一次的2个数字,其他数字都出现2次
程序员文章站
2024-03-16 18:37:16
...
package lianxi_1;
import java.util.ArrayList;
import java.util.List;
//如果一个数组中只有两个数字出现1次,其他都是出现2次,请找出这2个数字
//思路:将数字元素全部异或一遍,因为相同的元素异或以后为0,所以结果为出现1次的两个数字异或结果
//将异或结果按照二进制中不为0的最低位进行划分,将数组分成2个子数组,那么出现2次的都是同一个子数组,出现1次的在不同数组
//分别对每个子数组全部异或,即可
public class Exercise_13 {
static void fun(int[] a) {
int x = 0;
for (int i = 0; i < a.length; i++)
x ^= a[i];
int j = 1;
// 找出异或结果二进制表示中不为0的最低位
while (true) {
if ((x & j) == j) {
divArray(a, j);
break;
}
j *= 2;
}
}
private static void divArray(int[] a, int j) {
List<Integer> a1 = new ArrayList<>();
List<Integer> a2 = new ArrayList<>();
for (int i = 0; i < a.length; i++) {
if ((a[i] & j) == j)
a1.add(a[i]);
else
a2.add(a[i]);
}
int x = 0;
for (int i : a1) {
x ^= i;
}
System.out.println(x);
x = 0;
for (int i : a2)
x ^= i;
System.out.println(x);
}
public static void main(String[] args) {
int[] a = new int[] { 1, 1, 5, 6, 7, 4, 8, 4, 3, 8, 7, 3 };
fun(a);
}
}
上一篇: 随机输入三个数 输出三个数中最大的一个
下一篇: vue登录账号密码rsa加密
推荐阅读
-
找出数组中只出现一次的2个数字,其他数字都出现2次
-
数组中找出一个只出现了一次的数(其他数成对出现)
-
一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现。
-
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字,编程实现
-
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字,编程实现
-
一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现。
-
一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现。
-
c语言 一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现。
-
【c语言】一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现。
-
C语言:一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现。