跳到主要内容

846.一手顺子

链接:846.一手顺子
难度:Medium
标签:贪心、数组、哈希表、排序
简介:给你一个整数数组 hand 其中 hand[i] 是写在第 i 张牌,和一个整数 groupSize 。如果她可能重新排列这些牌,返回 true ;否则,返回 false 。

题解 1 - cpp

  • 编辑时间:2021-12-30
  • 执行用时:32ms
  • 内存消耗:19.9MB
  • 编程语言:cpp
  • 解法介绍:遍历后标记使用过的值。
class Solution {
public:
bool isNStraightHand(vector<int>& hand, int groupSize) {
int n = hand.size(), ans = 0, *check = (int*)calloc(n, sizeof(int)),
*nums = (int*)calloc(groupSize, sizeof(int));
sort(hand.begin(), hand.end());
for (int i = 0; i < n; i++) {
if (check[i]) continue;
int len = 0, pre = hand[i];
nums[len++] = i;
for (int j = i + 1; j < n && len < groupSize && hand[j] <= pre + 1;
j++) {
if (check[j] || pre == hand[j]) continue;
pre = hand[j];
nums[len++] = j;
}
if (len < groupSize) continue;
ans++;
for (int j = 0; j < groupSize; j++) check[nums[j]] = 1;
}
return ans * groupSize == n;
}
};