【力扣】914. 卡牌分组

题目:给定一副牌,每张牌上都写着一个整数。

此时,你需要选定一个数字 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

解答

class Solution {
    public boolean hasGroupsSizeX(int[] deck) {//求每个数的出现次数,再求最大公约数
        int gcdnum = 0;
        int[] nums = new int[10000];
        for(int i = 0; i < deck.length; i++) nums[deck[i]]++;
        for(int i : nums)
            if(i > 0){
               gcdnum = gcd(gcdnum, i);
               if(gcdnum == 1) return false;
            }
       return gcdnum >= 2;
    }
    public int gcd(int a, int b){
        return b == 0 ? a : gcd(b, a % b);
    }
}
发布了261 篇原创文章 · 获赞 283 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/weixin_44485744/article/details/105149931