在一個數組中除了某個數字之外,其餘數字都出現兩次,找到這個數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