菜鸟的每日力扣系列——846. 一手顺子
系列 每日 菜鸟 力扣 一手 顺子
2023-06-13 09:15:51 时间
拿到题我们看,首先要把牌分成n组,那么数组中元素个数必须能被n整除,即len(hand) % groupsize = 0;分组问题有了思路之后就是重新排列,我们知道,如果是顺子的话,需要连续的自然数,可以使用哈希表来统计hand中不同数字的数量,循环groupsize次,每次从剩余牌中找到数字最小的那个设为k,然后将哈希表中[k, k+groupsize)的每个数数量减一,如果数量不足一,表示缺少这张牌,并不能组成顺子,也就不能分成有效的groupsize组。
from typing import List
from collections import Counter
def isNStraightHand(hand: List, groupSize: int) -> bool:
if len(hand) % groupSize != 0:
return False
cnt = Counter(hand)
hand = sorted(set(hand), reverse=True)
for _ in range(len(hand) // groupSize):
k, v = hand[-1], cnt[hand[-1]]
for i in range(k, k + groupSize):
if cnt[i] < v:
return False
cnt[i] -= v
while hand and not cnt[hand[-1]]:
hand.pop()
return True
# hand = [1,2,3,6,2,3,4,7,8]
# groupSize = 3 # True
hand = [1,2,3,4,5]
groupSize = 4 # False
print(isNStraightHand(hand, groupSize))
(明天除了菜鸟的每日一题外,还想分享一下这一年的我的经历和收获,预感会有很多要说的~期待一下,明天见。)
END
相关文章
- 前端的设计模式系列-建造者模式
- 浅谈云上攻防系列——云IAM原理&风险以及最佳实践
- 关于图计算&图学习的基础知识概览:前置知识点学习(Paddle Graph L)系列【一】
- R语言cowplot包拼图系列教程~文末彩蛋
- 菜鸟的每日力扣系列——472. 连接词
- 菜鸟的每日力扣系列——1576. 替换所有的问号
- 菜鸟的每日力扣系列——2045. 到达目的地的第二短时间
- 菜鸟的每日力扣系列——1189. “气球” 的最大数量(#Day36)
- 菜鸟的每日力扣系列——1020. 飞地的数量(#Day35)
- 【每日要闻】台积电超过三星成全球最大半导体销售公司;iPhone 14系列创首发最快降价纪录
- 【愚公系列】2023年01月 Dapr分布式应用运行时-多容器微服务使用Dapr
- 华为P60系列发布:支持十档可变光圈+双向卫星通信!还有折叠屏新机Mate X3
- 干货:Java并发编程系列之synchronized(一)详解编程语言
- 华为 Mate 20/Pro 、P30/Pro 系列等 27 款机型开启鸿蒙 HarmonyOS 2 正式版升级