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-只出现一次的数字
最新推荐文章于 2024-07-21 22:27:18 发布