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