【Leetcode】卡牌分组(每日一题)
题目链接:卡牌分组
题意:给定一副牌,每张牌上都写着一个整数。
此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:
每组都有 X 张牌。
组内所有的牌上都写着相同的整数。
仅当你可选的 X >= 2 时返回 true。
题解:用map统计一下每个数字出现的次数,然后求这些次数的最大公约数,如果>1就可以组成卡牌。
但是我这个题优化了很久还是56ms//效率很低。。
代码:
1 class Solution { 2 public: 3 int gcd(int a,int b){ 4 if(b == 0) return a; 5 return gcd(b,a%b); 6 } 7 bool hasGroupsSizeX(vector<int>& deck) { 8 int len = deck.size(); 9 map<int,int>mp; 10 11 for(int i = 0; i < len;i++){ 12 mp[deck[i]]++; 13 } 14 15 int g = mp[deck[0]]; 16 int len1 = mp.size(); 17 for(int i = 0; i <= len1; i++){ 18 if(mp[i] == 0) continue; 19 else{ 20 g = gcd(g,mp[i]); 21 if(g == 1) return false; 22 } 23 } 24 return true; 25 } 26 };