開闊思惟之位運算1-----java

練習1:

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

相關文章
相關標籤/搜索