乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。
位運算、雜湊
解法一:暴力解題,雙重迴圈,o(n^2)
#-*- coding:utf-8 -*-
class
solution:
#返回[a,b] 其中ab是出現一次的兩個數字
def
#write code here
a=for i in
range(len(array)):
flag=1
for j in
range(len(array)):
if j!=i and array[j]==array[i]:
flag=0
ifflag:
return a
解法二:利用字典儲存元素出現次數,最後選出字典中value為1的key返回,o(2n)
#-*- coding:utf-8 -*-
class
solution:
#返回[a,b] 其中ab是出現一次的兩個數字
def
#write code here
a={}
for i in
range(len(array)):
try:
a[array[i]]+=1
except
: a[array[i]]=1b=
for i in
a:
if a[i]==1:
return b
解法二改進:由於乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。當字典中有某個key時,刪除這個key,否則這個key的value為1插入字典,時間複雜度為o(n)
#-*- coding:utf-8 -*-
class
solution:
#返回[a,b] 其中ab是出現一次的兩個數字
def
#write code here
a={}
for i in
range(len(array)):
try:
a.pop(array[i])
except
: a[array[i]]=1
return a.keys()
解法三:位運算(略)
劍指offer 40 陣列中只出現一次的字元
乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次,請寫出程式找出這兩個只出現了一次的數字,要求時間複雜度為o n 空間複雜度為o 1 此時出了迴圈,tty為兩個只出現一次的數的異或值 現在需要確定tty的最低位1在哪個bit位 int index 0 int num1 0 int num2 0...
劍指offer40陣列中只出現一次的數字
乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。解題思路 將陣列分成兩個陣列,每個陣列中包含乙個只出現一次的數字,其他都為出現兩次的數字。由於這兩個只出現一次的數字不相同,所以可以根據整個陣列異或的結果和1進行與操作,作為分割兩個陣列的位置。分割為兩個陣列...
劍指offer 40陣列中只出現一次的數字
題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。分析 1.因為有2個數字只出現了一次,而其他的數字都是2次,通過異或運算,最後可以得到這2個只出現一次的數字的異或結果值,這個值必然不為0。2.然後找出這個數字二進位制中,最低位為1的位數,必然這...