陣列中只出現一次的數字Java實現
阿新 • • 發佈:2018-12-26
一個整型數組裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。
思路:異或陣列所有元素,由於相同的數異或之後為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];
}
}
}