1. 程式人生 > >給定一個數組,其中只有一個數出現一次,別的數都出現3次,找出這個數

給定一個數組,其中只有一個數出現一次,別的數都出現3次,找出這個數

題目描述

給定一個數組,其中只有一個數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; } }