C++ 中一副牌中的 X 张同类牌
假设我们有一副牌,每张牌上都写着一个整数。我们需要检查是否可以选择一个 X(X >= 2),使得可以将整副牌分成 1 个或多个组,并且满足以下条件:每组恰好有 X 张牌。每组中的所有牌都具有相同的数字。
因此,如果输入类似于 deck = [1,2,3,4,4,3,2,1],则输出将为 True,因为可能的划分是 [1,1],[2,2],[3,3],[4,4]。
为了解决这个问题,我们将遵循以下步骤:
- 定义一个映射 mp
- 对于 deck 中的所有 x
- (将 mp[x] 加 1)
- 对于 mp 中的所有键值对 x
- ans := (ans 和 x 的值) 的最大公约数
- 当 ans > 1 时返回 true,否则返回 false
让我们看下面的实现来更好地理解:
示例
#include <bits/stdc++.h> using namespace std; class Solution { public: bool hasGroupsSizeX(vector<int>& deck) { unordered_map<int, int> mp; int ans; for (auto x : deck) mp[x]++; for (auto x : mp) ans = __gcd(ans, x.second); return (ans > 1); } }; main(){ Solution ob; vector<int> v = {1,2,3,4,4,3,2,1}; cout << (ob.hasGroupsSizeX(v)); }
输入
{1,2,3,4,4,3,2,1}
输出
1
广告