// 暴力..
class Solution {
public boolean hasGroupsSizeX(int[] deck) {
int[] temp = new int[10000];
for (int a : deck) {
temp[a] ++;
}
int j = 0;
for (int i = 2; i <= deck.length / 2 + 1; i++) {
if (deck.length % i != 0) { // length都除i不尽,肯定不行
continue;
}
for (j = 0; j < 10000; j++) {
if (temp[j] == 1) { // 有1肯定不行
return false;
}
if (temp[j] != 0 && temp[j] % i != 0) { // 某个数字不符合的i
break;
}
}
if (j == 10000) {
return true;
}
}
return false;
}
}
所有成员的最大公约数 > 1:
class Solution {
public boolean hasGroupsSizeX(int[] deck) {
if (deck.length < 2) {
return false;
}
int[] temp = new int[10000];
for (int a : deck) {
temp[a] ++;
}
int gcd = -1;
for (int a : temp) { // 遍历temp,算所有非0的最大公约数,如果值大于1则true
if (a == 0) {
continue;
}
gcd = (gcd == -1) ? a : gcd(gcd, a);
if (gcd == 1) {
return false;
}
}
return gcd > 1;
}
private int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
}