C ++中的纸牌中的X
假设我们有一副纸牌,每张纸牌上都有一个整数。我们必须检查是否可以选择X>=2,以便可以将整个卡片组分成1个或更多组卡片,其中满足以下条件:每个组的卡片数正好为X。每个组中的所有卡均具有相同的编号。
因此,如果输入就像deck=[1,2,3,4,4,3,2,1],那么输出将为True,可能的分区为[1,1],[2,2],[3,3],[4,4]。
为了解决这个问题,我们将遵循以下步骤-
定义一张映射mp
对于甲板上的所有x
(将mp[x]增加1)
对于mp中的所有键值对x
ans:=的gcd(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