题目链接---->914. 卡牌分组
统计每个数出现的次数,所有次数的最大公约数大于等于2则为true否则为false。
bool hasGroupsSizeX(vector<int>& deck) {
int n = deck.size();
if(n < 2)
return false;
int vis[10005] = {0},max_num = -1;
for(int i = 0;i < n;i++)
{
vis[deck[i]]++;
max_num = max(max_num,deck[i]);
}
int x = 0,g;
while(vis[x] == 0)
{
x++;
}
g = vis[x];
for(int i = x+1;i <= max_num && vis[i] != 0;i++)
{
g = gcd(g,vis[i]);
if(g < 2)
return false;
}
return g >= 2;
}
//辗转相除法
int gcd(int x,int y)
{
return !y ? x : gcd(y,x % y);
}