題目:乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o(n),空間複雜度是o(1)。
思路:
1.乙個陣列中如果只有乙個單獨的數,其餘的都成對出現,求這個數,就將陣列中的每個數相異或就能得到單獨的數
2.乙個陣列中有兩個單獨的數,其餘的成對出現,將這些數相異或後,所得的數肯定不為0,所得的數最高位1是區分兩個數的重點,將原陣列分為兩個部分。
例如100^001=101最高位1將兩數區分,同時也將陣列中其餘數區分
3.求乙個數的最高位1是第幾位,將這個數左移幾位,直到為0(最高位是第n位)
4.判斷乙個數的第n位是否為1,將這個數與1的右移(n-1)位相與,判斷是否為0
#coding:utf-8
deffind_single_number
(a):
xor_result = 0
n = 0
num1 = 0
num2 = 0
for i in a:
xor_result ^= i
while xor_result:
xor_result = xor_result >> 1
n = n+1
for i in a:
if i & (1
<< n-1) ==0:
num1 ^= i
else:
num2 ^= i
return [num1,num2]
result = find_single_number([1,4,4,7,8,8])
print('single nums:',result)
陣列中只出現1次的兩個數字
乙個整型陣列裡除了2個數字分別出現1次之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 如果我們能把問題中的陣列分成2個子陣列,使得每個子陣列中都只有乙個唯一的元素以及很多成對的元素,那麼我們就可以求出每個子陣列中唯一的元素,最終就可以得到...
數字中出現1的個數
求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數 從1 到 n 中1...
陣列中兩個數出現一次其餘出現兩次
有兩個數a b分別出現一次 其餘出現兩次 只要能找到乙個劃分乙個包含a 乙個包含b 對兩個分別使用找出出現一次的演算法 class solution public vectorsinglenumber vector nums int axorb 0 for int num nums axorb nu...