Có n người ID 0..n-1. Mảng groupSizes[i] = kích thước nhóm của người i. Chia thành các nhóm đúng kích thước.
Ví dụ: [3,3,3,3,3,1,3] → [[5],[0,1,2],[3,4,6]].
Thuật toán (Hash Map nhóm theo kích thước)
- Gom ID theo
groupSizes[i]vào map. - Duyệt map: chia danh sách ID thành các nhóm con kích thước = key.
Mã nguồn C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
vector> groupThePeople(vector& g) {
unordered_map> mp;
for (int i=0; i> res;
for (auto& [sz, ids] : mp) {
for (int i=0; i(ids.begin()+i, ids.begin()+i+sz));
}
}
return res;
}
};
int main() {
vector v = {3,3,3,3,3,1,3};
Solution ob;
auto ans = ob.groupThePeople(v);
for (auto& grp : ans) {
cout << "[";
for (int x : grp) cout << x << ",";
cout << "] ";
}
return 0;
}
Đầu vào / Đầu ra
Input: [3,3,3,3,3,1,3]
Output: [[5],[0,1,2],[3,4,6]]