六六大順 能不能製造出順子? Hand of Straights 堆積/排序應用_Leetcode #846

更新於 2024/06/06閱讀時間約 5 分鐘

題目敘述 Hand of Straights

給定一個整數陣列hand代表手牌點數,和參數groupSize。

請問能不能每groupSize張牌一組,每一組都拼出順子?

例如[1,2,3,4,5] 是一組 groupSize=5的順子


如果可以,返回True。

如果無解,返回False。


測試範例

Example 1:

Input: hand = [1,2,3,6,2,3,4,7,8], groupSize = 3
Output: true
Explanation: Alice's hand can be rearranged as [1,2,3],[2,3,4],[6,7,8]

可以[1,2,3],[2,3,4],[6,7,8]
每一組都是三張牌的順子​

Example 2:

Input: hand = [1,2,3,4,5], groupSize = 4
Output: false
Explanation: Alice's hand can not be rearranged into groups of 4.

無解​

觀察 順子的組成

順子可以怎麼描述?

可以用最小牌+牌組長度groupSize描述

例如最小牌是1,牌組長度groupSize=5

那麼[1,2,3,4,5]就是對應的一組順子


例如最小牌是5,牌組長度groupSize=3

那麼[5,6,7]就是對應的一組順子


演算法 最小堆積/排序

紀錄每個點數的出現次數

我們就從小到大掃描每張牌,檢查能不能組成牌組長度為groupSize的順子即可。

這邊要使用minHeap或者sort排序皆可,這邊以minHeap最小堆作為示範。


如果某一回合有缺牌湊不出來,代表無解,直接返回False即可。


程式碼 最小堆積/排序

class Solution:
def isNStraightHand(self, hand: List[int], groupSize: int) -> bool:

## Simple case:
# Not full division of handcard
if len(hand) % groupSize > 0:
return False

## Simple case:
# One card for each group, can be satisfied always.
if groupSize == 1:
return True

## General cases
# Maintain a mainheap of poker card points
heapify(hand)

# Occurrence of each points
cnt = Counter(hand)

# Keep taking poker card if deck is not empty
while hand:

# Take current smallest card point
cur = heappop(hand)

# All card of this point have been used, skip this round.
if cnt[cur] == 0:
continue

# Check if we can make a straight with specified groupSize or not
for num in range(cur, cur + groupSize):
if cnt[num] == 0:
return False

# used one card, update occurrence of this point
cnt[num] -= 1

return True

複雜度分析

時間複雜度: O( n log n)

使用minHeap抽牌的look耗費O( n log n )時間。

如果用排序,那排序本身也耗費O( n log n )時間。


空間複雜度: O( n )

用字典去記錄每個點數的出現次數,所需空間為O(n)。


關鍵知識點

我們就從小到大掃描每張牌,檢查能不能組成牌組長度為groupSize的順子即可。

算是一道基本的流程模擬題。


Reference

[1] Hand of Straights - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
給定兩個輸入整數陣列, 若在兩個陣列遇到相同的數字可以連成一線, 但是有規定連線不可和別的連線有交叉, 請問最多可以形成幾條連線? 解答中探討了演算法化簡的技巧和DP模型, 可以透過演算法化簡的技巧, 把這題映射到原本已經學會的Longest Common Subsequence的DP模型來解開。
給定一個字串陣列,請把它們所共有的字元伴隨著出現次數輸出。這篇文章介紹如何使用字典統計出現次數,和字典取交集的方法來解決此問題。並提供了複雜度分析和關鍵知識點。
給定一個字串s,以s擁有的字元製造迴文字串。要能製造出的迴文字串長度最長是多少,觀察迴文字串不外乎兩種模式對稱部分 + 核心字元 + 對稱部分,其中,核心字元在正中央出現一次,或者 對稱部分 + 對稱部分。使用演算法統計出現次數並推理出盡可能充分利用每個字元的迴文字串製造方法。
給定一個二維的二元矩陣,計算正方形的最大面積。利用DP演算法及最大化正方形邊長的方法,遍歷矩陣,釐清DP初始狀態並推導出DP狀態轉移關係式。複雜度分析說明了時間複雜度和空間複雜度。關鍵知識點是找出最大的正方形邊長。
Append Characters to String to Make Subsequence 給定兩個字串s和字串t。 請計算最少的字元串接數量是多少,串接在s的尾端,使得t是s的子序列。 測試範例 Example 1: Input: s = "coaching", t =
通過 取捨與否的最佳策略 來獲得 最高的分數。文章中運用了類似House Robbery的DP模型來解決這個問題。通過演算法化簡的技巧,將這個問題化簡到 相鄰物不可同時選擇的DP模型。同時,強烈建議同時複習House Robbery,熟悉DP演算法框架和掌握演算法化簡的技巧。
給定兩個輸入整數陣列, 若在兩個陣列遇到相同的數字可以連成一線, 但是有規定連線不可和別的連線有交叉, 請問最多可以形成幾條連線? 解答中探討了演算法化簡的技巧和DP模型, 可以透過演算法化簡的技巧, 把這題映射到原本已經學會的Longest Common Subsequence的DP模型來解開。
給定一個字串陣列,請把它們所共有的字元伴隨著出現次數輸出。這篇文章介紹如何使用字典統計出現次數,和字典取交集的方法來解決此問題。並提供了複雜度分析和關鍵知識點。
給定一個字串s,以s擁有的字元製造迴文字串。要能製造出的迴文字串長度最長是多少,觀察迴文字串不外乎兩種模式對稱部分 + 核心字元 + 對稱部分,其中,核心字元在正中央出現一次,或者 對稱部分 + 對稱部分。使用演算法統計出現次數並推理出盡可能充分利用每個字元的迴文字串製造方法。
給定一個二維的二元矩陣,計算正方形的最大面積。利用DP演算法及最大化正方形邊長的方法,遍歷矩陣,釐清DP初始狀態並推導出DP狀態轉移關係式。複雜度分析說明了時間複雜度和空間複雜度。關鍵知識點是找出最大的正方形邊長。
Append Characters to String to Make Subsequence 給定兩個字串s和字串t。 請計算最少的字元串接數量是多少,串接在s的尾端,使得t是s的子序列。 測試範例 Example 1: Input: s = "coaching", t =
通過 取捨與否的最佳策略 來獲得 最高的分數。文章中運用了類似House Robbery的DP模型來解決這個問題。通過演算法化簡的技巧,將這個問題化簡到 相鄰物不可同時選擇的DP模型。同時,強烈建議同時複習House Robbery,熟悉DP演算法框架和掌握演算法化簡的技巧。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
「傷寒,脈滑而厥者」,傷寒邪入厥陰,滑脈是脈象往來流利,應指圓滑,如珠滾玉盤之狀,代表有濕、有熱、有實,雖然厥陰證患者手腳冰冷,裡寒很盛,但是當血裡面的水、津液不夠時,一樣會有經熱,血脈神經的熱。所以只要對證,不管病在太陽、少陽、陽明,都會有白虎湯證,患者會覺得喉嚨乾、嘴唇黏黏的(沒口水),身體熱的
二六六:得病二三日,脈弱,無「太陽柴胡證」,煩躁,心下鞭,至四五日,雖能食,以「小承氣湯」少少與微和之,令小安。至五六日,與「小承氣湯」一升。若不大便,小便少者,雖不能食,但初頭鞕,後必溏,未定成鞕,攻之必溏。須小便利,矢定鞕,乃可攻之,宜「大承氣湯」。 「得病二三日,脈弱,無太陽柴胡證」,得病兩
Thumbnail
時值大暑,八月。雲腳開始長毛,跑到東邊聚積在大武山前,越積越厚。力社庄的頭人阿和,看著天氣,擔憂地對大夥兒說: 「可能風颱抹來呀!阿正,去叫擱卡濟腳梟,搬欛石去河岸擋水」。 力社庄是一群來自漳州的農民,發現這裡土肥水豐,在此開基立業。但庄東邊是林后溪(今民治溪),北邊是東溪(今東港溪),一旦做大水,
六六是阿姨花6000元買下的一隻黑色吉娃娃,本來想取名六千,後來決定叫六六比較可愛。阿姨說牠看起來很可憐,很明顯生病了。如果她不買牠一定撐不過幾天。 六六小時候長的真醜,滿眼的眼屎(一直長出來)毛髮稀疏,後來經阿姨好好照顧後才開始變可愛。
Thumbnail
好樂團的音樂一直是我的養病良藥,無副作用,只是覺得出歌怎麼這麼慢,哈哈哈。 「能不能請你別把我丟下?」其實常常在心裡喊著這句話,可是怎麼樣都說不出口,我可以大喊「我愛你」,卻總是無法請託別人多體諒我一些,就像歌詞寫的「我知道不好的時候你們都將遠走」。 其實那都是“我以為”的「我知道」,也許沒有人會這
Thumbnail
今天的領受蠻特別的, 或許是上帝給我的提醒! 感謝主❤️❤️❤️ 因為想要找小本本 來寫新的靈修內容, 剛好就看到有一本去年寫的 還可以繼續寫~ 有一篇是再講之前讀 提摩太前書時的紀錄~ 覺得這時候看到和激勵我! 提摩太六章1~10節 有一部分是在講 敬虔的心和貪財之間的關係 很被7、8節打到 因為
乾薑附子湯方 乾薑3、生附子2 注意:注意:漢制劑量八兩等於現今的六錢,一錢等於3.75公克。上方方劑內容的劑量單位為「錢」。 乾薑一兩、附子一枚,生用去皮破八片。右二味,以水三升,煮取一升,去滓,頓服。
Thumbnail
【黃誌群的一門講堂ep7】課程影片: 大家好,上一次跟大家分享到,就是當我們內在觀察的時候發現的第一個真相,就是喋喋不休的頭腦。我們的頭腦一直在說話,不是跟別人說話就是跟自己說話停不下來。 這就是我們目前的徵象,喋喋不休的頭腦。
Thumbnail
對志工唯真而言,每次教學服務中「管理秩序」是她覺得最困難的地方。 偏鄉小學的小朋友們大多是原住民,他們總是非常活潑、熱情。志工就得時刻告訴自己,要秉持著自己的教學原則,可以輕鬆但不能隨便。 當然在熱鬧的時候,志工會跟著他們一起玩,但該嚴肅的時候就得嚴肅,不能動搖。
Thumbnail
無懼三星、曾與蔣尚義、梁孟松一同終結 IBM 技術霸權,言談溫文儒雅,卻頂著一身長達40年的專業硬氣。 楊光磊,加州大學柏克萊分校博士,前台積電資深研發處長,曾負責0.18/0.13微米與65奈米先進製程研發,並在「銅製程突破」戰役中將 IBM 逐出戰場。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
「傷寒,脈滑而厥者」,傷寒邪入厥陰,滑脈是脈象往來流利,應指圓滑,如珠滾玉盤之狀,代表有濕、有熱、有實,雖然厥陰證患者手腳冰冷,裡寒很盛,但是當血裡面的水、津液不夠時,一樣會有經熱,血脈神經的熱。所以只要對證,不管病在太陽、少陽、陽明,都會有白虎湯證,患者會覺得喉嚨乾、嘴唇黏黏的(沒口水),身體熱的
二六六:得病二三日,脈弱,無「太陽柴胡證」,煩躁,心下鞭,至四五日,雖能食,以「小承氣湯」少少與微和之,令小安。至五六日,與「小承氣湯」一升。若不大便,小便少者,雖不能食,但初頭鞕,後必溏,未定成鞕,攻之必溏。須小便利,矢定鞕,乃可攻之,宜「大承氣湯」。 「得病二三日,脈弱,無太陽柴胡證」,得病兩
Thumbnail
時值大暑,八月。雲腳開始長毛,跑到東邊聚積在大武山前,越積越厚。力社庄的頭人阿和,看著天氣,擔憂地對大夥兒說: 「可能風颱抹來呀!阿正,去叫擱卡濟腳梟,搬欛石去河岸擋水」。 力社庄是一群來自漳州的農民,發現這裡土肥水豐,在此開基立業。但庄東邊是林后溪(今民治溪),北邊是東溪(今東港溪),一旦做大水,
六六是阿姨花6000元買下的一隻黑色吉娃娃,本來想取名六千,後來決定叫六六比較可愛。阿姨說牠看起來很可憐,很明顯生病了。如果她不買牠一定撐不過幾天。 六六小時候長的真醜,滿眼的眼屎(一直長出來)毛髮稀疏,後來經阿姨好好照顧後才開始變可愛。
Thumbnail
好樂團的音樂一直是我的養病良藥,無副作用,只是覺得出歌怎麼這麼慢,哈哈哈。 「能不能請你別把我丟下?」其實常常在心裡喊著這句話,可是怎麼樣都說不出口,我可以大喊「我愛你」,卻總是無法請託別人多體諒我一些,就像歌詞寫的「我知道不好的時候你們都將遠走」。 其實那都是“我以為”的「我知道」,也許沒有人會這
Thumbnail
今天的領受蠻特別的, 或許是上帝給我的提醒! 感謝主❤️❤️❤️ 因為想要找小本本 來寫新的靈修內容, 剛好就看到有一本去年寫的 還可以繼續寫~ 有一篇是再講之前讀 提摩太前書時的紀錄~ 覺得這時候看到和激勵我! 提摩太六章1~10節 有一部分是在講 敬虔的心和貪財之間的關係 很被7、8節打到 因為
乾薑附子湯方 乾薑3、生附子2 注意:注意:漢制劑量八兩等於現今的六錢,一錢等於3.75公克。上方方劑內容的劑量單位為「錢」。 乾薑一兩、附子一枚,生用去皮破八片。右二味,以水三升,煮取一升,去滓,頓服。
Thumbnail
【黃誌群的一門講堂ep7】課程影片: 大家好,上一次跟大家分享到,就是當我們內在觀察的時候發現的第一個真相,就是喋喋不休的頭腦。我們的頭腦一直在說話,不是跟別人說話就是跟自己說話停不下來。 這就是我們目前的徵象,喋喋不休的頭腦。
Thumbnail
對志工唯真而言,每次教學服務中「管理秩序」是她覺得最困難的地方。 偏鄉小學的小朋友們大多是原住民,他們總是非常活潑、熱情。志工就得時刻告訴自己,要秉持著自己的教學原則,可以輕鬆但不能隨便。 當然在熱鬧的時候,志工會跟著他們一起玩,但該嚴肅的時候就得嚴肅,不能動搖。
Thumbnail
無懼三星、曾與蔣尚義、梁孟松一同終結 IBM 技術霸權,言談溫文儒雅,卻頂著一身長達40年的專業硬氣。 楊光磊,加州大學柏克萊分校博士,前台積電資深研發處長,曾負責0.18/0.13微米與65奈米先進製程研發,並在「銅製程突破」戰役中將 IBM 逐出戰場。