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