跳转至

914.卡牌分组 (Easy)*

题目描述*

给定一副牌,每张牌上都写着一个整数。

此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:

  • 每组都有 X 张牌。
  • 组内所有的牌上都写着相同的整数。
  • 仅当你可选的 X >= 2 时返回 true。

提示*

1 <= deck.length <= 10000, 0 <= deck[i] < 10000

代码*

最简单的就是统计元素个数,然后遍历看是否有数字可整除。

class Solution {
private:
    int gcd(int a, int b) {
        return b == 0 ? a : gcd(b, a % b);
    }
public:
    bool hasGroupsSizeX(vector<int>& deck) {
        if(deck.size() < 2) {
            return false;
        }
        map<int, int> cnt;
        int len = deck.size();
        for(int i = 0; i < len; i++) {
            cnt[deck[i]]++;
        }
        if(cnt.begin()->second == 1) {
            return false;
        }
        int res = cnt.begin()->second;
        for(auto iter = cnt.begin(); iter != cnt.end(); iter++) {
            res = gcd(iter->second, res);
            if(res == 1) {
                return false;
            }
        }
        return res != 1;
    }
};

最后更新: July 23, 2022