假设我们有一副纸牌,每张纸牌上都有一个整数。我们必须检查是否可以选择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