1. 程式人生 > >陣列中只出現一次的數字Java實現

陣列中只出現一次的數字Java實現

一個整型數組裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

思路:異或陣列所有元素,由於相同的數異或之後為0,所以最後剩下的是兩個只出現一次的數異或。然後記下其中一個為1的位置。遍歷整個陣列,當和這個數做&操作時,為0的一起異或,則能找出其中一個只出現一次的數。然後為1的那個為另一個只出現一次的數。

//num1,num2分別為長度為1的陣列。傳出引數
//將num1[0],num2[0]設定為返回結果
public class Solution {
    public void FindNumsAppearOnce(int [] array,int
num1[] , int num2[]) { if(array.length < 2) return ; int myxor = 0; int flag = 1; for(int i = 0 ; i < array.length; ++ i ) myxor ^= array[i]; while((myxor & flag) == 0) flag <<= 1; // num1[0] = myxor; //num2[0] = myxor; for
(int i = 0; i < array.length; ++ i ){ if((flag & array[i]) == 0) num2[0]^= array[i]; else num1[0]^= array[i]; } } }