package 剑指Offer.只出现一次的数字;
/**
* @program:多线程和IO
* @descripton:一个整数数组,有一个数字只出现了一次,其余的都出现了2次
* @进阶版 其他的出现了三次
* @author:ZhengCheng
* @create:2021/9/24-19:27
**/
public class NumAppearOnce {
public static void main(String[] args) {
int[] a1 = {1,1,2,2,3,3,4,5,5,6,6,7,7,8,8,22,22,33,33,11,11};
int[] a2 = {1,1,1,2,2,2,3,3,3,4,5,5,5,6,6,6,
7,7,7,8,8,8,22,22,22,33,33,33,11,11,11};
/*int i = OnceAndTwice(a1);*/
/*System.out.println(i);*/
int j = OnceAndThird(a2);
System.out.println(j);
}
public static int OnceAndTwice(int[] a ){
int result = 0;
for (int i = 0; i < a.length; i++) {
result = result ^ a[i];
}
return result;
}
public static int OnceAndThird(int[] a ){
int result = 0;
int[] num = new int[32];//int 32位
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < 32; j++) {
num[j] += a[i] >>(31 - j) & 1;//此时这句话不对
//需要与1取与 为什么? 因为1是000。。1 取与保证我们只拿了最后一位
//因为负数和正数在移动时,其补充的数是不同的。
}
}
for (int i = 0; i < 32; i++) {
result += num[i]%3 << (31 - i);
}
return result;
}
}
剑指offer-只出现一次的数字
最新推荐文章于 2025-12-08 09:18:56 发布
本文介绍了一个整数数组中找出仅出现一次数字的算法。包括一种数字出现两次时的解决方案及进阶版即数字出现三次的情况。通过位操作实现高效查找。
344

被折叠的 条评论
为什么被折叠?



