您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關LeetCode如何計算數組中數字出現的次數,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
一個整型數組 nums 里除兩個數字之外,其他數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。要求時間復雜度是 O(n),空間復雜度是 O(1)。
輸入:nums = [4,1,4,6]
輸出:[1,6] 或 [6,1]
輸入:nums = [1,2,10,4,1,4,3,3]
輸出:[2,10] 或 [10,2]
xor & -xor
, 直接就能求得最低位的 1 對應的數字, 這個大家手動模擬下補碼就知道是為什么了class Solution:
def singleNumbers(self, nums: List[int]) -> List[int]:
# 先拿到所有數字的異或結果, 該結果一定至少有一位是1, 否則就不可能有兩個出現一次的數字
xor = 0
for n in nums:
xor ^= n
# 然后隨便針對異或結果的某一位1, 將原數組分為兩類, 自然兩個出現一次的數字就會分別落在不同類里面, 否則其異或結果的這一位不可能是1
# 這里直接利用樹狀數組的lowbit(即原來的數字的最低位的1)
mask = xor & -xor
a, b = 0, 0
for n in nums:
if n & mask:
# 如果數字的這一位是1, 歸為一類, 求它們的異或值, 即為其中一個出現一次的數
a ^= n
else:
# 如果數字的這一位是0, 歸為另一類, 求它們的異或值, 即為另一個出現一次的數
b ^= n
return [a, b]
關于“LeetCode如何計算數組中數字出現的次數”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。