In a deck of cards, each card has an integer written on it.
Return true
if and only if you can choose X >= 2
such that it is possible to split the entire deck into 1 or more groups of cards, where:
- Each group has exactly
X
cards. - All the cards in each group have the same integer.
Example 1:
Input: deck = [1,2,3,4,4,3,2,1] Output: true Explanation: Possible partition [1,1],[2,2],[3,3],[4,4].
Example 2:
Input: deck = [1,1,1,2,2,2,3,3] Output: false´ Explanation: No possible partition.
思路:就是统计一下各个integer的频率之后,找gcd,只要gcd > 1 就可以;
class Solution {
public boolean hasGroupsSizeX(int[] deck) {
HashMap<Integer, Integer> countmap = new HashMap<>();
for(int i = 0; i < deck.length; i++) {
countmap.put(deck[i], countmap.getOrDefault(deck[i], 0) + 1);
}
int res = 0;
for(Integer i: countmap.values()) {
res = gcd(res, i);
}
return res > 1;
}
private int gcd(int a, int b) {
if(b == 0) {
return a;
}
return gcd(b, a % b);
}
}