共计 1460 个字符,预计需要花费 4 分钟才能阅读完成。
练习 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
正文完