【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 };

 

posted @ 2020-03-27 18:24  甜酒果。  阅读(269)  评论(0编辑  收藏  举报