【914】. 卡牌分组


链接

题目描述

在这里插入图片描述
在这里插入图片描述

最大公约数

1.思路

对每一个数算一下出现的个数放在map中。
key:数字
value:出现的次数
分组成功的情况:所有数字的出现次数的最大公约数 >= 2

2.代码

class Solution {
    public boolean hasGroupsSizeX(int[] deck) {
        if(deck == null || deck.length == 0){
            return false;
        }
        HashMap<Integer,Integer> map = new HashMap<>();
        for(int i = 0; i < deck.length ;i++){
            if(!map.containsKey(deck[i])){
                map.put(deck[i],1);
            }else{
                int temp = map.get(deck[i]);
                temp++;
                map.put(deck[i],temp);
            }
        }
        int temp = map.get(deck[0]);
        for(Integer key : map.keySet()){
            temp = gcd(map.get(key),temp);
        }
        if(temp >= 2){
            return true;
        }
        return false;
    }
    
    //求两个数的最大公约数
    //辗转相除法
    private int gcd(int a ,int b){
        return a % b == 0 ? b : gcd(b,a%b);
    }
}

3.运行结果:

在这里插入图片描述

发布了55 篇原创文章 · 获赞 1 · 访问量 860

猜你喜欢

转载自blog.csdn.net/weixin_42469108/article/details/105134955