劍指offer40 陣列中只出現一次的數字

2022-07-15 01:15:09 字數 1277 閱讀 1996

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

位運算、雜湊

解法一:暴力解題,雙重迴圈,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的位數,必然這...