链接
题目描述
最大公约数
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);
}
}