846. 一手顺子
Alice 手中有一把牌,她想要重新排列这些牌,分成若干组,使每一组的牌数都是 groupSize
,并且由 groupSize
张连续的牌组成。
给你一个整数数组 hand
其中 hand[i]
是写在第 i
张牌,和一个整数 groupSize
。如果她可能重新排列这些牌,返回 true
;否则,返回 false
。
示例 1:
1 | 输入:hand = [1,2,3,6,2,3,4,7,8], groupSize = 3 |
示例 2:
1 | 输入:hand = [1,2,3,4,5], groupSize = 4 |
提示:
1 <= hand.length <= 104
0 <= hand[i] <= 109
1 <= groupSize <= hand.length
算法思想:
- 如果数组长度不能被顺子长度等分,则直接不符合
- 然后将数组进行从小到大排序
- 将数组元素存入哈希表并记录出现次数
- 每次取出最小元素x当做顺子的头,然后在哈希表中读取当前顺子的其余元素
- 如果可以满足要求,则当前顺子的其余元素在哈希表中的值都必须大于等于1
- 如果值小于1则不满足
代码实现:
1 | public boolean isNStraightHand(int[] hand, int groupSize) { |