难度简单100
给定一副牌,每张牌上都写着一个整数。
此时,你需要选定一个数字 X
,使我们可以将整副牌按下述规则分成 1 组或更多组:
- 每组都有
X
张牌。
- 组内所有的牌上都写着相同的整数。
仅当你可选的 X >= 2
时返回 true
。
示例 1:
1 2 3
| 输入:[1,2,3,4,4,3,2,1] 输出:true 解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]
|
示例 2:
1 2 3
| 输入:[1,1,1,2,2,2,3,3] 输出:false 解释:没有满足要求的分组。
|
示例 3:
1 2 3
| 输入:[1] 输出:false 解释:没有满足要求的分组。
|
示例 4:
1 2 3
| 输入:[1,1] 输出:true 解释:可行的分组是 [1,1]
|
示例 5:
1 2 3
| 输入:[1,1,2,2,2,2] 输出:true 解释:可行的分组是 [1,1],[2,2],[2,2]
|
提示:
1 <= deck.length <= 10000
0 <= deck[i] < 10000
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| class Solution { public: const int maxn=10002; int cnt[10002]; int GCD1(int num1,int num2) { if(num1%num2==0) { return num2; } else { int next1=num2; int next2=num1%num2; return GCD1(next1,next2); } } bool hasGroupsSizeX(vector<int>& deck) { memset(cnt,0,sizeof(cnt)); for(int i=0;i<deck.size();i++){ cnt[deck[i]]+=1; } int g=-1; for(int i=0;i<maxn;i++){ if(cnt[i]!=0){ if(g==-1){ g=cnt[i]; }else{ g=GCD1(g,cnt[i]); } } } if(g>=2)return true; else return false; } };
|