Giả sử chúng ta có một bộ bài, mỗi quân bài có ghi một số nguyên trên đó. Ta phải kiểm tra xem có thể chọn X> =2 sao cho có thể chia toàn bộ bộ bài thành 1 hoặc nhiều nhóm thẻ, trong đó điều kiện sau thỏa mãn:Mỗi nhóm có đúng X số thẻ. Tất cả các thẻ trong mỗi nhóm có cùng một số.
Vì vậy, nếu đầu vào giống như deck =[1,2,3,4,4,3,2,1], thì đầu ra sẽ là True, vì các phân vùng có thể là [1,1], [2,2], [3,3], [4,4].
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- Xác định một bản đồ mp
- cho tất cả x trong bộ bài
- (tăng mp [x] lên 1)
- cho tất cả cặp khóa-giá trị x trong mp
- ans:=gcd of (ans và giá trị của x)
- trả về true khi ans> 1, ngược lại là false
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#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));
} Đầu vào
{1,2,3,4,4,3,2,1} Đầu ra
1