In a deck of cards, each card has an integer written on it.
Input: deck = [1,2,3,4,4,3,2,1]
Output: true
Explanation: Possible partition [1,1],[2,2],[3,3],[4,4].
Input: deck = [1,1,1,2,2,2,3,3]
Output: false´
Explanation: No possible partition.
Input: deck = [1]
Output: false
Explanation: No possible partition.
Input: deck = [1,1]
Output: true
Explanation: Possible partition [1,1].
Input: deck = [1,1,2,2,2,2]
Output: true
Explanation: Possible partition [1,1],[2,2],[2,2].
class Solution {
public int gcd(int x, int y) {
if (y == 0)
return x;
if (y > x)
return gcd(y, x);
return gcd(y, x % y);
}
public boolean hasGroupsSizeX(int[] deck) {
if (deck.length == 1)
return false;
Map<Integer, Integer> map = new HashMap<>();
for (int x : deck)
map.put(x, map.getOrDefault(x, 0) + 1);
if (map.size() == 1)
return true;
int gcd = 1, index = 0;
boolean first = true;
int[] numbers = new int[map.size()];
for (int x : map.keySet())
numbers[index++] = x;
for (int i = 1; i < numbers.length; i++) {
if (first) {
gcd = gcd(map.get(numbers[i]), map.get(numbers[i - 1]));
first = false;
} else
gcd = gcd(gcd, map.get(numbers[i]));
}
return gcd >= 2;
}
}