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