題目一:陣列中數字只出現一次的兩個數字。
乙個整形陣列裡除兩個數字之外,其它數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度為o(n),空間複雜度是o(1)。
解題思路:位運算中異或運算的性質:兩個相同數字等於0,乙個數和零異或還是它本身。當只有乙個數出現一次時,我們把陣列中所有的數依次異或,最後剩下的數就是落單的數,因為成對的數已經抵消了。依照這個思路,在乙個陣列中只有兩個數(a,b)出現了一次,依次異或陣列中的數,則得到的結果就是a,b異或的結果。這個結果的二進位制中1表示的時a,b中的不同的位,我們就去第乙個1所在的位數,假設時第三位,接著把原陣列分成兩組,分組標準是第三位是否為1。因此相同的數肯定在一組,相同數字對應的位都相同,不同的數,肯定不在一組。然後按照乙個陣列中只有乙個數字出現一次的方法分別找出。
//num1,num2分別為長度為1的陣列。傳出引數
//將num1[0],num2[0]設定為返回結果
public class solution
//先確定陣列依次異或的結果
int result = 0;
for(int i=0; i> index) & 1) == 1 )
return true;
return false;
} public int first1(int result)
return index;
}}
劍指Offer 56 陣列中重複的數字
題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。演算法1 bool duplicate int numbe...
劍指offer 56陣列中數字出現的次數
乙個整型陣列 nums 裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 在做這道題之前你需要知道 異或運算子的性質。也就是 異或 相同為0,不同為1 舉個例子 3 5 3的二進位制 0 0 1 1 5的二進位制 0 1 0 1 ...
劍指offer 56題 陣列中數字出現的次數2
在乙個陣列 nums 中除乙個數字只出現一次之外,其他數字都出現了三次。請找出那個只出現一次的數字。示例 1 輸入 nums 3,4,3,3 輸出 4 示例 2 輸入 nums 9,1,7,9,7,9,7 輸出 1 利用位運算,當乙個陣列 現的其他數字都為3次時,所有數字的每一位加起來的各自的值對3...