Blogs Hub

X of a Kind in a Deck of Cards - Array - Easy - LeetCode - MiniTV

X of a Kind in a Deck of Cards - Array - Easy - LeetCode - मिनी टीवी

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.
Example 3:

Input: deck = [1]
Output: false
Explanation: No possible partition.
Example 4:

Input: deck = [1,1]
Output: true
Explanation: Possible partition [1,1].
Example 5:

Input: deck = [1,1,2,2,2,2]
Output: true
Explanation: Possible partition [1,1],[2,2],[2,2].
 

Constraints:

1 <= deck.length <= 10^4
0 <= deck[i] < 10^4

public class Solution {
    public bool HasGroupsSizeX(int[] deck) {
        if(deck.Length<=1){
            return false;
        }
        
        var map = new Dictionary<int,int>();
        for(int i=0;i<deck.Length;i++){
            if(map.ContainsKey(deck[i])){
                map[deck[i]]++;
            }
            else{
                map.Add(deck[i],1);
            }
        }
                        
        int res = 0;
        foreach(var item in map){
            res = gcd(item.Value,res);
        }
        return res>1;
    }
    
    private int gcd(int a, int b){
        if(b>0){
            return gcd(b,a%b);
        }
        
        return a;
    }
}

 


Time Complexity: O(n)

Space Complexity: O(n)