Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save Helenyin123/70281a764042f990f701bd54b8925af0 to your computer and use it in GitHub Desktop.

Select an option

Save Helenyin123/70281a764042f990f701bd54b8925af0 to your computer and use it in GitHub Desktop.
914. X of a kind in a deck of card
public boolean hasGroupsSizeX(int[] deck) {
if (deck == null || deck.length <= 1) return false;
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < deck.length; i++) {
int freq = map.getOrDefault(deck[i], 0);
map.put(deck[i], freq + 1);
}
int n = 0; List<Integer> lcf = new ArrayList<>();
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
if (n == 0) {
lcf = LCF(entry.getValue());
n++;
} else {
for (int i = 0; i < lcf.size(); i++) {
if (entry.getValue() % lcf.get(i) != 0) {
lcf.remove(i);
}
if (lcf.isEmpty()) return false;
}
}
}
return !lcf.isEmpty();
}
private List<Integer> LCF(int number) {
List<Integer> result = new ArrayList<Integer>();
boolean[] prime = getPrime(number);
for (int i = 2; i <= number; i++) {
if (prime[i] && number % i == 0) {
result.add(i);
while (number % i == 0) {
number = number / i;
}
if (number == 1) {
return result;
}
}
}
return result;
}
private boolean[] getPrime(int number) {
boolean[] prime = new boolean[number + 1];
Arrays.fill(prime, true);
for (int i = 2; i < prime.length; i++) {
if (prime[i]) {
for (int j = 2; i * j <= number; j++) {
prime[i * j] = false;
}
}
}
return prime;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment