您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“LeetCode如何求數(shù)組中數(shù)字出現(xiàn)的次數(shù)”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“LeetCode如何求數(shù)組中數(shù)字出現(xiàn)的次數(shù)”這篇文章吧。
在一個(gè)數(shù)組 nums 中除一個(gè)數(shù)字只出現(xiàn)一次之外,其他數(shù)字都出現(xiàn)了三次。請(qǐng)找出那個(gè)只出現(xiàn)一次的數(shù)字。
輸入:nums = [3,4,3,3]
輸出:4
輸入:nums = [9,1,7,9,7,9,7]
輸出:1
O(32) == O(1)
, 所以總體復(fù)雜度仍為 O(N)class Solution:
def singleNumber(self, nums: List[int]) -> int:
res = 0
for i in range(32):
# 當(dāng)前統(tǒng)計(jì)的位數(shù)為第i位
# 假設(shè)i==1, 對(duì)應(yīng)的mask就是0b000...00010 (共32位, 高位全為0)
mask = 1 << i
cnt = 0
for x in nums:
if x & mask:
# 如果這個(gè)數(shù)字與mask相與的結(jié)果為1, 則說明其當(dāng)前位為1, 累加到次數(shù)中
cnt += 1
if cnt % 3 == 1:
# 如果次數(shù)為1, 則說明出現(xiàn)一次的數(shù)字在這一位上為1, 將最終結(jié)果或上當(dāng)前mask即可
res |= mask
# 當(dāng)然也可以選擇結(jié)果加上mask, 因?yàn)槊總€(gè)mask都是只有一位為1且各不相同
# res += mask
return res
以上是“LeetCode如何求數(shù)組中數(shù)字出現(xiàn)的次數(shù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。