Created
October 5, 2018 21:58
-
-
Save Helenyin123/70281a764042f990f701bd54b8925af0 to your computer and use it in GitHub Desktop.
914. X of a kind in a deck of card
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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