給定一個包含n個整數的數組,除了一個數出現一次之外,其餘數均出現兩次,找出這個出現一次的整數算法
思路:運用異或運算,暴力,快速……數組
public class SingleNumber { public static int singleNumber(int[] A) { int x = 0 ; for(int a:A) x = x ^ a ; return x ; } public static void main(String[] args) { int A[] = {1,1,4,4,2,3,3} ; int s = singleNumber(A) ; System.out.printf("%d\n",s) ; } }
異或運算法則:spa
1^1 = 0code
1^0 = 1blog
0^1 = 1class
0^0 = 0方法
另一種方法:統計
public class SingleNumberII { public static int Solve(int A[]) { int sum = 0 ; for(int i = 0 ; i < 32 ; i++) { // 統計每一位「1」的個數 int count = 0 , d = 1 << i ; for(int a:A) count += (a >> i) & 1 ; // 取出最低位 if(count % 2 > 0) // 去除出現兩次的整數 sum |= d ; } return sum ; } public static void main(String[] args) { int[] A = {1,1,2,2,3,3,5} ; int x = Solve(A) ; System.out.printf("%d\n",x) ; } }
給定一個包含n個整數的數組,除了一個數據沒有出現三次,其餘數據都出現三次,找出這個整數數據
public class SingleNumberII { public static int Solve(int A[]) { int sum = 0 ; for(int i = 0 ; i < 32 ; i++) { // 統計每一位「1」的個數 int count = 0 , d = 1 << i ; for(int a:A) count += (a >> i) & 1 ; if(count % 3 > 0) // 去除出現三次的整數 sum |= d ; } return sum ; } public static void main(String[] args) { int[] A = {1,1,1,2,2,2,3,3,3,5} ; int x = Solve(A) ; System.out.printf("%d\n",x) ; } }