91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LeetCode如何找出只出現一次的數字

發布時間:2021-12-15 10:48:27 來源:億速云 閱讀:149 作者:小新 欄目:大數據

這篇文章主要為大家展示了“LeetCode如何找出只出現一次的數字”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“LeetCode如何找出只出現一次的數字”這篇文章吧。

1

 題目描述

給定一個非空整數數組,只有一個數字出現一次,其余出現三次,找出只出現一次的數字。如輸入[3,4,5,4,3,3],輸出5。

2

 解題

思路一  :  集合差值

對集合進行切片,生成三個集合,找到與另外兩個集合不同的集合缺少的數字。如集合[2,2,3,2],先對集合進行排序,得到[2,2,2,3],通過切片生成集合[2,3]、[2]、[2],比較集合之間元素差別,得到輸出結果3。

class Solution:    def singleNumber(self, nums: List[int]) -> int:        nums.sort()         a=len(set(nums[::2]))        b=len(set(nums[1::2]))        if a==b:            return list(set(nums[::3]) - set(nums[2::3]))[0]        else:            return list(set(nums[::3]) - set(nums[1::3]))[0]
思路二  :  位運算

通過set方法時空復雜度都是O(N),位運算可以使得空間復雜度降為O(1)。在LeetCode刷題DAY 5:只出現一次的數字中使用的“異或”其實就是同一狀態出現兩次則歸零,即0->1->10=0的變化,在本題中則是要讓同一狀態出現三次歸零,即00->01->10->11=00,可見這里需要用兩個bit進行狀態記錄。

LeetCode如何找出只出現一次的數字

這里需要注意的是,要對two、one兩位分別計算。對于one,當two=1時,不管輸入是什么下一步的one都為0,當two=0時,輸入1則one=~one,輸入0則one不變。對于two,依賴于one變化后的狀態,one新狀態為1時,two則為0,one新狀態為0時,輸入1則two=~two,輸入0則不變。因為出現三次就歸零,所以one最后保留的是只出現了一次的值。

class Solution:    def singleNumber(self, nums: List[int]) -> int:        one,two = 0,0        for i in nums:            one = one^i & ~two            two = two^i & ~one        return one
當然,對集合進行遍歷,通過哈希表記錄每個數字出現次數的方法也是可以的,時空復雜度也都是O(N),代碼與Day 5思路一一致,此處不再贅述。

以上是“LeetCode如何找出只出現一次的數字”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

个旧市| 台北县| 邮箱| 邳州市| 嘉荫县| 乳山市| 宁陵县| 双鸭山市| 且末县| 申扎县| 定安县| 达孜县| 都昌县| 宣武区| 西峡县| 新龙县| 宝应县| 弥渡县| 元江| 石狮市| 蒲城县| 朝阳县| 绥宁县| 雷波县| 昂仁县| 翼城县| 东辽县| 社旗县| 开封县| 合肥市| 长宁区| 安塞县| 黑水县| 鄢陵县| 凌海市| 兰坪| 西丰县| 密云县| 北流市| 吉首市| 葵青区|