微信网站制作企业,wordpress 付费下载付费阅读,教育培训门户网站模板下载,网站开通流程给定一副牌#xff0c;每张牌上都写着一个整数。
此时#xff0c;你需要选定一个数字 X#xff0c;使我们可以将整副牌按下述规则分成 1 组或更多组#xff1a;
每组都有 X 张牌。 组内所有的牌上都写着相同的整数。 仅当你可选的 X 2 时返回 true。 示例 1#xf…给定一副牌每张牌上都写着一个整数。
此时你需要选定一个数字 X使我们可以将整副牌按下述规则分成 1 组或更多组
每组都有 X 张牌。 组内所有的牌上都写着相同的整数。 仅当你可选的 X 2 时返回 true。 示例 1
输入[1,2,3,4,4,3,2,1] 输出true 解释可行的分组是 [1,1][2,2][3,3][4,4] 示例 2
输入[1,1,1,2,2,2,3,3] 输出false 解释没有满足要求的分组。 示例 3
输入[1] 输出false 解释没有满足要求的分组。 示例 4
输入[1,1] 输出true 解释可行的分组是 [1,1] 示例 5
输入[1,1,2,2,2,2] 输出true 解释可行的分组是 [1,1][2,2][2,2]
提示
1 deck.length 10000 0 deck[i] 10000
思路思考后得出结论每个数字出现的次数如果有一个总的最大公约数就可行。
比如1出现了2次2出现了4次3出现了8次此用例就是true。
另外注意到deck[i]的范围明显用桶记录更好。
class Solution {public boolean hasGroupsSizeX(int[] deck) {int[] count new int[10000];for (int c: deck) count[c];int g -1;for (int i 0; i 10000; i)if (count[i] 0) {if (g -1) g count[i];else g gcd(g, count[i]);}return g 2;}public int gcd(int x, int y) {return x 0 ? y : gcd(y%x, x);}
}