class Solution {
public:
bool isNStraightHand(vector<int>& hand, int groupSize) {
}
};
846. 一手顺子
Alice 手中有一把牌,她想要重新排列这些牌,分成若干组,使每一组的牌数都是 groupSize
,并且由 groupSize
张连续的牌组成。
给你一个整数数组 hand
其中 hand[i]
是写在第 i
张牌,和一个整数 groupSize
。如果她可能重新排列这些牌,返回 true
;否则,返回 false
。
示例 1:
输入:hand = [1,2,3,6,2,3,4,7,8], groupSize = 3
输出:true
解释:Alice 手中的牌可以被重新排列为 [1,2,3],[2,3,4],[6,7,8]
。
示例 2:
输入:hand = [1,2,3,4,5], groupSize = 4 输出:false 解释:Alice 手中的牌无法被重新排列成几个大小为 4 的组。
提示:
1 <= hand.length <= 104
0 <= hand[i] <= 109
1 <= groupSize <= hand.length
注意:此题目与 1296 重复:https://leetcode.cn/problems/divide-array-in-sets-of-k-consecutive-numbers/
原站题解
python3 解法, 执行用时: 84 ms, 内存消耗: 16.4 MB, 提交时间: 2022-12-06 13:46:28
class Solution: def isNStraightHand(self, hand: List[int], groupSize: int) -> bool: if len(hand) % groupSize > 0: return False hand.sort() cnt = Counter(hand) for x in hand: if cnt[x] == 0: continue for num in range(x, x + groupSize): if cnt[num] == 0: return False cnt[num] -= 1 return True
golang 解法, 执行用时: 36 ms, 内存消耗: 6.9 MB, 提交时间: 2022-12-06 13:46:07
func isNStraightHand(hand []int, groupSize int) bool { if len(hand)%groupSize > 0 { return false } sort.Ints(hand) cnt := map[int]int{} for _, num := range hand { cnt[num]++ } for _, x := range hand { if cnt[x] == 0 { continue } for num := x; num < x+groupSize; num++ { if cnt[num] == 0 { return false } cnt[num]-- } } return true }
javascript 解法, 执行用时: 112 ms, 内存消耗: 51.5 MB, 提交时间: 2022-12-06 13:45:53
/** * @param {number[]} hand * @param {number} groupSize * @return {boolean} */ var isNStraightHand = function(hand, groupSize) { const n = hand.length; if (n % groupSize !== 0) { return false; } hand.sort((a, b) => a - b); const cnt = new Map(); for (const x of hand) { cnt.set(x, (cnt.get(x) || 0) + 1); } for (const x of hand) { if (!cnt.has(x)) { continue; } for (let j = 0; j < groupSize; j++) { const num = x + j; if (!cnt.has(num)) { return false; } cnt.set(num, cnt.get(num) - 1); if (cnt.get(num) == 0) { cnt.delete(num); } } } return true; };
java 解法, 执行用时: 25 ms, 内存消耗: 42.6 MB, 提交时间: 2022-12-06 13:45:38
class Solution { public boolean isNStraightHand(int[] hand, int groupSize) { int n = hand.length; if (n % groupSize != 0) { return false; } Arrays.sort(hand); Map<Integer, Integer> cnt = new HashMap<Integer, Integer>(); for (int x : hand) { cnt.put(x, cnt.getOrDefault(x, 0) + 1); } for (int x : hand) { if (!cnt.containsKey(x)) { continue; } for (int j = 0; j < groupSize; j++) { int num = x + j; if (!cnt.containsKey(num)) { return false; } cnt.put(num, cnt.get(num) - 1); if (cnt.get(num) == 0) { cnt.remove(num); } } } return true; } }