Problem: 914. X of a Kind in a Deck of Cards 卡牌分组
耗时100%,统计每个数字的频次,若只有一种数字且频次==1则false若频次>1则true,然后求出每两种数字频次的最大公约数gcd的最小值mi,对所有频次都要能够被mi整除才行
Code
class Solution { public: int gcd(int a, int c) { if(c==0) return a; return gcd(c, a % c); } bool hasGroupsSizeX(vector<int>& deck) { unordered_map<int, int> ump; int mi = INT_MAX; for(int& i : deck) { ump[i]++; } if(ump.size() == 1) { if(ump.begin()->second == 1) return false; return true; } for(auto&& [k, l] : ump) { for(auto && [kk, ll] : ump) { if(k==kk) continue; mi = min(mi, gcd(l, ll)); } } if(mi==1) return false; for(auto&& [k, l] : ump) { if(l % mi != 0) return false; } return true; } };