题目:给定一副牌,每张牌上都写着一个整数。此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:每组都有 X 张牌。组内所有的牌上都写着相同的整数。仅当你可选的 X >= 2 时返回 true。
解题思路:利用HashMap计数,在逐一寻找X的值。有点笨哈
classSolution{publicbooleanhasGroupsSizeX(int[] deck){
HashMap<Integer,Integer> dec =newHashMap<>();int len = deck.length;if(len<2)returnfalse;int num =0;for(int i=0;i<len;i++){if(dec.containsKey(deck[i])){
dec.put(deck[i],dec.get(deck[i])+1);}else{
dec.put(deck[i],1);
num++;}}if(len/num<2)returnfalse;int k = dec.get(deck[0]);for(int j=2;j<=k;j++){int m =0;for(Map.Entry<Integer,Integer> entry:dec.entrySet()){if(entry.getValue()%j!=0)break;
m++;}if(m==num)returntrue;}returnfalse;}}
题解做法:想到了最大公约数,没想到又用了数组这个做法。 public int gcd(int x, int y) { return x == 0 ? y : gcd(y%x, x); } 这种求最大公约数的写法要记下来。
classSolution{publicbooleanhasGroupsSizeX(int[] deck){int[] count =newint[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;}publicintgcd(int x,int y){return x ==0? y :gcd(y%x, x);}}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/x-of-a-kind-in-a-deck-of-cards/solution/qia-pai-fen-zu-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。