解题思路:
1.遍历deck数组,用新数组nums记录deck中各元素出现的次数
2.定义变量k,初始值为第一个元素的个数
3.遍历deck数组,求当前k和nums[deck[i]]的最大公约数,并把结果赋给k
4.如果k>=2,则返回true,反之,返回false
代码实现:
class Solution {
public boolean hasGroupsSizeX(int[] deck) {
int len=deck.length;
int[] nums=new int[10000];//deck中元素的个数
for(int i=0;i<len;++i){
nums[deck[i]]++;
}
int k=nums[deck[0]];
for(int i=1;i<len;++i){//求元素个数的最大公约数
k=divisor(k,nums[deck[i]]);
}
if(k>=2){
return true;
}
return false;
}
//求两个数的最大公约数
public int divisor(int a,int b){
int temp;//临时变量
if(a<b)//a<b 则交换
{
temp=a;
a=b;
b=temp;
}
while(b!=0)
{
temp=a%b;//a中大数除以b中小数循环取余,直到b及余数为0
a=b;
b=temp;
}
return a;
}
}