萬綠叢中一點紅 落單的數字II 有教學影片_Single Number II_二進位操作_Leetcode #260

閱讀時間約 1 分鐘

題目敘述 Single Number II

給定一個輸入陣列,已知有一個烙單的數字,其他剩餘的數字都恰巧出現三次。

找出這個烙單的數字

題目額外提出限制,請使用O(n)線性時間、O(1)常數空間複雜度的演算法。


測試範例

Example 1:

Input: nums = [2,2,3,2]
Output: 3
3是烙單的數字,只出現一次。

Example 2:

Input: nums = [0,1,0,1,0,1,99]
Output: 99
99是烙單的數字,只出現一次。

約束條件

Constraints:

  • 1 <= nums.length <= 3 * 10^4

輸入陣列的長度介於1~三萬之間。

  • -2^31 <= nums[i] <= 2^31 - 1

每個陣列元素都在4byte整數範圍內。

  • Each element in nums appears exactly three times except for one element which appears once.

只有恰好一個數字烙單,其他剩餘的數字都剛好出現三次。


觀察

如果最直覺的想法,就是用字典去記錄每個數字的出現次數。
找出出現次數只有一次的數字即可。


演算法 二進位操作 + 狀態機

但是,困難點在於題目多了額外拘束,限定使用O(1)常數空間。

可以怎麼做呢?


教學影片



可以用State machine維持一個有限狀態機,分別記錄出現零次(等價於 mod 3 餘零)、一次、兩次的數字,並且用布林代數推導狀態更新公式。


其他的數字都會回到 mod 3餘零的狀態,只有落單的數字會停留在出現一次的狀態

最後,留在出現一次的那個數字就是最終答案,也就是落單的數字。


程式碼 二進位操作+ 狀態機

class Solution:
def singleNumber(self, nums: List[int]) -> int:
state_one = 0
state_two = 0

for num in nums:

state_one = (num ^ state_one) & ~state_two
state_two = (num ^ state_two) & ~state_one

return state_one

複雜度分析

時間複雜度:O(n)

從左到右,掃描每個數字,每個數字計算一次。


空間複雜度: O(1)

使用到的都是固定尺寸的臨時變數,為常數級別O(1)。


關鍵知識點

這個系列題考點在於二進位操作、XOR運算子特性、布林代數的化簡

強烈讀者建議一起複習。

二進位操作 尋找落單的數字 Single Number Leetcode #136 精選75題

萬綠叢中一點紅 落單的數字 Single Number III_二進位操作_Leetcode #260


Reference

[1] Single Number II - LeetCode

52會員
339內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
新型態詐騙手法層出不窮,民眾們千萬要小心 ▏洪宗暉律師阿洪(洪宗暉律師)在兩年多前,曾經寫下「提供帳戶、幫忙領款也是犯罪?」一文,提醒讀者們自己的帳戶自己保管最好,買賣或借用帳戶給他人的刑事法律責任風險太高,請大家務必謹慎。 但隨著時間經過,國內外詐騙集團不但沒有隨著政府成立「打詐辦公室」逐漸消失,反而越發猖獗,儼然有成為「詐騙國家隊」的態勢.....
Thumbnail
avatar
律師不是魔法師
2023-10-12
「累積千萬退休金,從現在開始」-紀律與執行-「累積千萬退休金,從現在開始」-紀律與執行- 人生旅途上,如果沒有目標與夢想,那這一生等於白活,也是沒有意義的~ 年老想要過怎樣的生活,在於年輕時種了什麼“因”,未來20年後才會長出什麼樣的“果”。 當年輕時注重享受,即使收入在高,沒有對未來做足計畫,也沒辦法存下錢.買進資產,那年老必定
avatar
Ealan指數價值投資筆記
2023-02-05
好書推薦 | 去書店買個好人生 (日本百萬暢銷作家,教你從閱讀養成8大能力,解決職場煩惱、關係焦慮、未來迷茫)你上一次去書店,是什麼時候? 日本百萬暢銷作家,教你從閱讀養成8大能力,解決職場煩惱、關係焦慮、未來迷茫。 讀吧!書裡什麼都有! 當我們走進書店,即是踏上思維升級的逆襲之路
Thumbnail
avatar
莫非
2022-12-19
萬點存股行不行!?我從萬點才開始存股,現在報酬率是多少!?台股萬八高點至今,跌幅2X% 那我從2020年12月開始定期定額 0050、006208、0056 可說是在萬點才開始定期定額,那到現在這三檔的報酬率是如何呢!?
Thumbnail
avatar
股海的諾亞方舟
2022-09-17
萬綠叢中一點紅辣椒也是從中美洲來的植物,但因為已經到亞洲好幾百年,亞洲人類很喜歡這味,早就融入許多地方的飲食文化,甚至形成傳統美食中不可缺少的靈魂食材。品質優良的辣椒,除了辣之外,還富含多樣的香氣,採些新鮮的辣椒,日曬做乾,可以備著用,多年香氣不減。
Thumbnail
avatar
小河
2022-03-13
【歌者人生】導言:萬綠叢中一點紅,歌者的故事,故事的歌 先前我寫過【蔡依林、濱崎步、瑪丹娜的歌者人生】這個今年新專題的構想緣起和所有章節目次,這一篇將開啟後面章節中這三位歌姬的歌者物語。聽她們的歌,讀她們的歌詞,我覺得既像是讀小說,又像是看電影情節一樣很享受。我想品論玩味她們為自己營造的世界觀、人生哲學、歌場的周折、個人品牌形象、社會實踐和成功公式。
Thumbnail
avatar
你的英日語自學導師 譯難忘  ོꦿ༄꧁꧂
2021-01-09
無法下班的接案人生/16從年薪百萬到月薪零的焦慮和憂鬱其實「錢」能解決的事,從來不是大事。該焦慮的不是年收入百萬跟月收入零之間的起伏,而是錢怎麼也買不到的一夜好眠、一個擁抱、一句問候、一點溫柔的陪伴!
Thumbnail
avatar
換日線
2020-11-27