Skip to content

Latest commit

 

History

History

914

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

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: [1,2,3,4,4,3,2,1]
Output: true
Explanation: Possible partition [1,1],[2,2],[3,3],[4,4]

Example 2:

Input: [1,1,1,2,2,2,3,3]
Output: false
Explanation: No possible partition.

Example 3:

Input: [1]
Output: false
Explanation: No possible partition.

Example 4:

Input: [1,1]
Output: true
Explanation: Possible partition [1,1]

Example 5:

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


Note:

  1. 1 <= deck.length <= 10000
  2. 0 <= deck[i] < 10000
 

Companies:
Google

Related Topics:
Array, Math

Solution 1.

// OJ: https://leetcode.com/problems/x-of-a-kind-in-a-deck-of-cards/
// Author: github.com/lzl124631x
// Time: O(N^2loglogN)
// Space: O(N)
class Solution {
public:
    bool hasGroupsSizeX(vector<int>& deck) {
        unordered_map<int, int> cnt;
        for (int n : deck) cnt[n]++;
        int minCnt = INT_MAX;
        for (auto p : cnt) minCnt = min(minCnt, p.second);
        if (minCnt == 1) return false;
        for (int x = 2; x <= minCnt; ++x) {
            bool found = true;
            for (auto p : cnt) {
                if (p.second % x) {
                    found = false;
                    break;
                }
            }
            if (found) return true;
        }
        return false;
    }
};