卡牌分组

2020-03-27  本文已影响0人  我知他风雨兼程途径日暮不赏

题目

给定一副牌,每张牌上都写着一个整数。
此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:



JAVA 代码

实际上是求最大公约数是否大于等于2。

public boolean hasGroupsSizeX(int[] deck) {
        Map<Integer,Integer> map = new HashMap<>();
        for(int i=0;i<deck.length;i++){
            if(map.get(deck[i])!=null){
                map.put(deck[i],map.get(deck[i])+1);
            }else{
                map.put(deck[i],1);
            }
        }
        int gcdNumber = Integer.MAX_VALUE;
        for(Integer integer :map.keySet()){
            if(gcdNumber==Integer.MAX_VALUE){
                gcdNumber = map.get(integer);
                continue;
            }
            gcdNumber = gcd(gcdNumber,map.get(integer));
        }

        return gcdNumber>=2?true:false;
    }


    /***
     * 最大公约数
     */
    public static int gcd(int left,int right){
        int res = 1;
        int n = 2;
        int leftChange = left;
        int rightChange = right;
        while(res<left && res<right && n<=leftChange && n<=rightChange){
            if(leftChange%n==0 && rightChange%n==0){
                leftChange = leftChange/n;
                rightChange = rightChange/n;
                res *= n;
            }else{
                n++;
            }
        }
        // res = res*leftChange*rightChange;
        return res;
    }
上一篇下一篇

猜你喜欢

热点阅读