914. X of a Kind in a Deck of Cards

2018/10/06 leetcode 共 1032 字,约 3 分钟

title

problem link

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]

solution

先计数,计数后求这些count的最小公倍数

class Solution {
public:
	int gcd(int a, int b) {
		return b == 0 ? a:gcd(b,a%b) ;
	}
	bool hasGroupsSizeX(vector<int>& deck) {
		unordered_map<int, int> map1;
		if (deck.size() < 2) return false;
		int minx = INT_MAX;
		for (auto &it : deck) {
			map1[it]++;
		}
		for (auto &it : map1) {
			if (minx == INT_MAX) {
				minx = it.second;
			}
			else {
				minx = gcd(minx, it.second);
			}
		}

		return minx >= 2;
	}
};

Search

    Table of Contents