LeetCode-in-Java

914. X of a Kind in a Deck of Cards

Easy

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:

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.

Constraints:

Solution

import java.util.HashMap;
import java.util.Map;

public class Solution {
    public boolean hasGroupsSizeX(int[] deck) {
        HashMap<Integer, Integer> hmap = new HashMap<>();
        for (int j : deck) {
            if (hmap.containsKey(j)) {
                hmap.put(j, hmap.get(j) + 1);
            } else {
                hmap.put(j, 1);
            }
        }
        int x = hmap.get(deck[0]);
        for (Map.Entry<Integer, Integer> entry : hmap.entrySet()) {
            x = gcd(x, entry.getValue());
        }
        return x >= 2;
    }

    private int gcd(int a, int b) {
        if (b == 0) {
            return a;
        }
        return gcd(b, a % b);
    }
}