在一个数组中除了某个数字之外,其余数字都出现两次,找到这个数java
能够用异或对出现两次的数字进行消除数组
public class BitOperations3 { public static void main(String[] args) { int arr[]= {1,1,2,2,3,3,4,4,7,7,25,25,8,8,6}; int x1=0; for(int i=0;i<arr.length;i++) x1=x1^arr[i]; System.out.println(x1); }}
# 练习2:
1~1000这1000个数放在含有1001个元素在数组中只有惟一一个元素重复,找到重复的数
## 思路 用1-1000对这个数组进行去重
## 代码dom
import java.util.Random; public class BitOperations4 { public static void main(String[] args) { int n=1001; int[] arr=new int[n]; for(int i=0;i<arr.length-1;i++) arr[i]=i+1; arr[n-1]=new Random().nextInt(n-1)+1; int x1=0; for(int i=1;i<n;i++) x1=x1^i; for(int i=0;i<arr.length;i++) { x1=x1^arr[i]; System.out.print(arr[i]+","); } System.out.println("\n"+arr[arr.length-1]); System.out.println(x1); }}
在一个数组中只有一个数出现了一次,其余数都出现K次,输出出现一次的数
## 思路
跟上面的思路同样进行去重,那怎么去重复呢
咱们知道两个相同的二进制数进行不进位加法等于零,
十个十进制数进行不进位加法等于零,
那么k个k 进制进行不进位加法等于零
## 代码ui
public class BitOperations1 { public static void main(String[] args) { int k=3; int arr[]= {1,1,1,7,7,7,6,8,8,8,0,0,0}; char[][] arrs=new char[arr.length][]; int maxlen=0; for(int i=0;i<arr.length;i++) { arrs[i]=new StringBuilder(Integer.toString(arr[i],k)).reverse().toString().toCharArray(); if(arrs[i].length>maxlen) maxlen=arrs[i].length; } int []resArr=new int[maxlen]; for(int i=0;i<arr.length;i++) { for(int j=0;j<maxlen;j++) { if(j>=arrs[i].length) resArr[j]+=0; else resArr[j]+=(arrs[i][j]-'0'); } } int res=0; for(int i=0;i<maxlen;i++) { res+=(resArr[i]%k)*(int)(Math.pow(k,i)); } System.out.print(res); }}
# <-_->code
# -------------------------------------------------------------------------------------Zzhit