题目地址:

https://leetcode.com/problems/hand-of-straights/description/

给定一个长 n n n数组 a a a,再给定一个正整数 k k k,问 a a a是否能分成若干组,每组恰好 k k k个数,并且这 k k k个数是连续的 k k k个整数。

将这些数存起来,每次挑出最小值 x x x,然后依次删掉 x , x + 1 , . . . , x + k − 1 x,x+1,...,x+k-1 x,x+1,...,x+k1代码如下:

class Solution {
public:
  bool isNStraightHand(vector<int> &a, int sz) {
    int n = a.size();
    if (n % sz) return false;
    map<int, int> mp;
    for (int x : a) mp[x]++;
    for (auto [k, cnt] : mp) {
      if (cnt <= 0) continue;
      for (int i = 1; i < sz; i++) {
        int &c = mp[k + i];
        if (c < cnt) return false;
        c -= cnt;
      }
    }
    return true;
  }
};

时间复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn),空间 O ( n ) O(n) O(n)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐