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

更新於: 2020-07-04

239 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.