-
一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这两种数
-
// 一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这两种数 public static void print_1(int[] arr) { int eor=0; for(int i=0;i<arr.length;i++) { eor = eor^arr[i]; } int rightOne = eor&(-eor);//提取出最右侧的1 int onlyOne = 0; for(int i=0;i<arr.length;i++) { if((arr[i]&rightOne)!=0) { onlyOne ^= arr[i]; } } System.out.println(onlyOne + " " +(onlyOne^eor)); }
-
一个数组中有一种数出现了K次,其他数都出现了M次,M>1,K<M,请找到出现了K次的数,要求,额外空间复杂度为O(1),时间复杂度为O(N)
-
//一个数组中有一种数出现了K次,其他数都出现了M次,M>1,K<M,请找到出现了K次的数, //要求,额外空间复杂度为O(1),时间复杂度为O(N) public static int print_2(int[] arr,int k,int m) { int[] t = new int[32]; for(int num:arr) { for(int i=0;i<=31;i++) { t[i]+=((num>>i)&1); } } int ans=0; for(int i=0;i<=31;i++) { if(t[i]%m!=0) { ans |= (1<<i); } } return ans; }
异或运算题目
最新推荐文章于 2022-08-28 14:09:50 发布