電子商務(wù)網(wǎng)站建設(shè)商城網(wǎng)站長(zhǎng)尾關(guān)鍵詞挖掘愛(ài)站工具
異或運(yùn)算(XOR)
異或運(yùn)算是一種位運(yùn)算,通常用符號(hào)?^
?表示。它的運(yùn)算規(guī)則如下:
- 如果兩個(gè)二進(jìn)制位相同,結(jié)果為?
0
。 - 如果兩個(gè)二進(jìn)制位不同,結(jié)果為?
1
。
具體來(lái)說(shuō),對(duì)于兩個(gè)二進(jìn)制位?a
?和?b
,異或運(yùn)算的結(jié)果如下:
a | b | a ^ b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
異或運(yùn)算的特性
- 交換律:
a ^ b = b ^ a
- 結(jié)合律:
(a ^ b) ^ c = a ^ (b ^ c)
- 自反性:
a ^ a = 0
- 與零的異或:
a ^ 0 = a
--------------------------------------------以下是題目----------------------------
題目 :問(wèn)題描述
在一個(gè)班級(jí)中,每位同學(xué)都拿到了一張卡片,上面有一個(gè)整數(shù)。有趣的是,除了一個(gè)數(shù)字之外,所有的數(shù)字都恰好出現(xiàn)了兩次?,F(xiàn)在需要你幫助班長(zhǎng)小C快速找到那個(gè)拿了獨(dú)特?cái)?shù)字卡片的同學(xué)手上的數(shù)字是什么。
要求:
- 設(shè)計(jì)一個(gè)算法,使其時(shí)間復(fù)雜度為 O(n),其中 n 是班級(jí)的人數(shù)。
- 盡量減少額外空間的使用,以體現(xiàn)你的算法優(yōu)化能力。
測(cè)試樣例
樣例1:
輸入:
cards = [1, 1, 2, 2, 3, 3, 4, 5, 5]
?輸出:4
?解釋:拿到數(shù)字 4 的同學(xué)是唯一一個(gè)沒(méi)有配對(duì)的。
樣例2:
輸入:
cards = [0, 1, 0, 1, 2]
?輸出:2
?解釋:數(shù)字 2 只出現(xiàn)一次,是獨(dú)特的卡片。
?完整的代碼
def solution(cards):# 初始化一個(gè)變量來(lái)存儲(chǔ)異或的結(jié)果result = 0# 遍歷數(shù)組中的每一個(gè)元素for card in cards:# 對(duì)每一個(gè)元素進(jìn)行異或運(yùn)算result ^= card# 返回最終的結(jié)果return resultif __name__ == "__main__":# 添加你的測(cè)試用例print(solution([1, 1, 2, 2, 3, 3, 4, 5, 5]) )print(solution([0, 1, 0, 1, 2]))print(solution([7, 3, 3, 7, 10]))
解釋
result = 0
:初始化一個(gè)變量?result
?為 0,用于存儲(chǔ)異或運(yùn)算的結(jié)果。for card in cards
:遍歷數(shù)組中的每一個(gè)元素。result ^= card
:對(duì)每一個(gè)元素進(jìn)行異或運(yùn)算,并將結(jié)果存儲(chǔ)在?result
?中。return result
:返回最終的結(jié)果,即唯一出現(xiàn)一次的數(shù)字。
這個(gè)代碼可以正確地找到數(shù)組中唯一出現(xiàn)一次的數(shù)字,并且滿足題目要求的時(shí)間復(fù)雜度 O(n) 和空間復(fù)雜度 O(1)。
如果你有任何問(wèn)題或需要進(jìn)一步的幫助,請(qǐng)告訴我!
?