846. Hand of Straights
題目網址:https://leetcode.cn/problems/hand-of-straights/
題意:Alice 手中有一堆牌, 她想要重新排列這些牌, 將其分成若干組, 使每一組的牌數都是
groupSize, 並且由groupSize張連續的牌組成。給一整數 array
hand和一整數groupSize, 其中hand[i]代表第i張牌。如果她可以重新排列這些牌, 返回true;否則, 返回false。

Solution:
想法:利用 Greedy, 首先判斷
hand.size()能否被groupSize所整除, 若不行則返回false。否則, 用 map 統計每張牌出現的次數, 並且根據 card value 由小到大排序。每個 group 每次都先從 map 中取出最小的 card valuestart, 則該 group 的數字範圍為[start, start + groupSize - 1], 只要缺少一個便直接返回false取出數字後, 要將其出現次數減一, 然後判斷是否為
0。若是的話, 要將其移除, 否則start會一直取到同一個數e.g.
freqs = {{1, 1}, {2, 1}},groupSize = 1
- 若不移除
cnt = 0的元素, 則取完第一個 group 後,freqs = {{1, 0}, {2, 1}}- 第二個 group 的
start仍會取到1, 而非2
class Solution { |
- time:$O(n \cdot log(n))$ ➔ map 移除元素需花 $O(log(n))$, worse case:每個
hand[i]都是 unique - space:$O(n)$ ➔
freqs
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論