刷題 陣列中只出現一次的數字

2021-08-20 08:16:40 字數 809 閱讀 3642

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

第一想法是用雜湊表,但其實浪費了空間。

我們可以利用異或運算的特性,任何乙個數字異或自己都等於0。先考慮如果乙個陣列中只有乙個數字只出現一次,那麼只要從頭到尾依次異或陣列中的每乙個數字就能得到那個只出現了一次的數字。在這個問題裡,我們可以把原始陣列分成兩個子陣列,使得每個子陣列包含乙個只出現一次的數字。由於這兩個數肯定不一樣,所以陣列中所有數字的異或結果至少有一位為1,記錄下第乙個為1的位置,按照這個位置是否為1將陣列分成兩部分。

# -*- coding:utf-8 -*-

class solution:

# 返回[a,b] 其中ab是出現一次的兩個數字

# write code here

num = array[0]

foritem

in array[1:]:

num = num ^ item

index = 0

while

notnum & 1:

num = num >> 1

index += 1

a, b = 0, 0

foritem

in array:

temp = item

for _ in range(index):

temp = temp >> 1

if temp & 1:

a = a ^ item

else:

b = b ^ item

return [a, b]

leetcode刷題 只出現一次的數字

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1 示例 2 輸入 4,1,2,1,2 輸出 4 自己的 class solution ret...

191211題(陣列中只出現一次的數字)

思路 1.將陣列的所有元素異或得到的結果為不存在重複的兩個元素異或的結果 很容易理解,如果陣列中的所有數字都出現了偶數次,那麼所有元素異或的結果一定為0 2.兩個不相等的元素在位級表示上必定會有一位存在不同 3.任何數和0異或的結果都是它本身 個人分析如下 設不存在重複的兩個元素分別為a和b,那麼a...

陣列中只出現一次的數字

何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。輸入 每個測試案例包括兩行 第一行包含乙個整數n,表示陣列大小。2 n 10 6。第二行包含n個整數,表示陣列元素,元素均為int。輸...