数据结构与算法:异或运算
生活随笔
收集整理的這篇文章主要介紹了
数据结构与算法:异或运算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
異或: 相同為0,不同為1.(也可以當作"無符號相加")
異或滿足交換律.
A ^ B ^ C ^ D = D ^ A ^ C ^ B不用額外變量交換兩個數
public static void main(String[] args) {int a = 7;int b = 10;a = a ^ b;b = a ^ b;a = a ^ b;System.out.println(a);System.out.println(b);}題目一: 一個數組中有一種數出現了奇數次,其他數都出現了偶數次,怎么找到并打印這種數.
public static void main(String[] args) {/** 一個數組中有一種數出現了奇數次,其他數都出現了偶數次,怎么找到并打印這種數*/int[] arr = {1,1,2,3,3,4,4,5,5};int num = 0;for (int i = 0; i < arr.length; i++) {num = arr[i]^num;}System.out.println(num);}題目二: 取出一個整數中最右側的1
題目三:
一個數組中有兩種數出現了奇數次,其他數都出現了偶數次,怎么找到并打印這兩種數…
int[] arr = {1,1,2,2,2,3,3,4,4,4,4,5,6,6}; 2,5出現奇數次。
題目四
import java.util.HashMap; import java.util.HashSet;public class CodeKM {public static void main(String[] args) {int kinds = 10;int range = 200; int testTime = 1; // 測試次數int max = 9;System.out.println("測試開始!");for (int i = 0; i < testTime; i++) {int a = (int)(Math.random() * max)+1; // 1~9int b = (int)(Math.random() * max)+1; // 1~9int k = Math.min(a,b);int m = Math.max(a,b);if(k == m){// 保證k一定小于mm++;}int[] arr = randomArray(kinds,range,k,m);int ans1 = test(arr, k,m);int ans2 = onlyKTimes(arr,k,m);if(ans1 != ans2){System.out.println("出錯了!");}}System.out.println("測試結束!");}public static int[] randomArray(int maxKinds, int range, int k, int m){int ktimeNum = randomNumber(range);int numKinds = (int)(Math.random()+maxKinds)+2;// k + (numKinds-1)*mint[] arr = new int[k + (numKinds-1)*m];int index = 0;for(;index<k;index++){arr[index] = ktimeNum;}numKinds--;HashSet<Integer> set = new HashSet<>();set.add(ktimeNum);while(numKinds!=0){int curNum = 0;do{curNum = randomNumber(range);}while(set.contains(curNum));set.add(curNum); // 將新生成的數保存在set集合中numKinds--;for (int i=0;i<m;i++){arr[index++] = curNum;}}for (int i = 0; i < arr.length; i++) {int j = (int)(Math.random()*arr.length);int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;//System.out.print(arr[i]+" ");}return arr;}public static int randomNumber(int range){return ((int)(Math.random()*range)+1)-((int)(Math.random()*range)+1);}public static int test(int[] arr, int k, int m){HashMap<Integer,Integer> map = new HashMap();for(int num : arr){if(map.containsKey(num)){map.put(num,map.get(num)+1);}else{map.put(num,1);}}for(int num : map.keySet()){if(map.get(num) == k){return num;}}return -1;}// 參數arr, 只有一種數出現了k次,其他數都出現了M次public static int onlyKTimes(int[] arr,int k,int m){int[] t = new int[32];/** t[0] 0位置的1出現了幾個* t[i] i位置的1出現了幾個*/for(int num : arr){// 只循環32次,所以時間復雜度還是 O(n)for (int i = 0; i < 32; i++) {if(((num >> i) & 1) != 0){// 表示num在第i位是1t[i]++;}}}int ans = 0;for (int i = 0; i < 32; i++) {if(t[i] %m != 0){// i位置上除以m,有余數,則表示i位置上有1ans |= (1<<i);}}return ans;} } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的数据结构与算法:异或运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构总览
- 下一篇: 数据结构与算法:链表,队列,栈,递归,有