练习1:

在一个数组中除了某个数字以外,其余数字都呈现两次,找到这个数

思路:

能够用异或对呈现两次的数字进行打消

代码

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对这个数组进行去重
## 代码

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 进制进行不进位加法等于零
## 代码

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);}}

# <-_->

# -------------------------------------------------------------------------------------Zzh