給定一個數組,其中只有一個數出現一次,別的數都出現3次,找出這個數
阿新 • • 發佈:2019-01-10
題目描述
給定一個數組,其中只有一個數x出現一次,別的數都出現3次,找出這個數x。(線性時間複雜度)
思路
這個用異或不可以。
可以設定一個長度為32的int陣列。統計每位上出現1的次數,如果次數能被3整除,說明x該位上為0,否則為1
java程式碼實現
import java.util.Scanner;
public class AppearOnce3 {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
String[] strArr = s.split(" " );
int len = strArr.length;
int[] nums = new int[len];
for(int i = 0; i < len; i++)
nums[i] = Integer.parseInt(strArr[i]);
System.out.println(appearOnce(nums));
}
public static int appearOnce(int[] nums){
int len = nums.length;
int [] bits = new int[32];
for(int i = 0 ; i < len; i++)
for(int j = 0; j < 32; j++)
bits[j] += ((nums[i]>>j)&1);
int result = 0;
for(int i = 0 ; i < 32; i++){
if(bits[i] % 3 == 1) result += 1 << i;
}
return result;
}
}