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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言
C++
C#
MongoDB
MySQL
Javascript
PHP