Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Nhóm người theo kích thước nhóm (Group the People Given the Group Size They Belong To) trong C++

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)

  1. Gom ID theo groupSizes[i] vào map .
  2. 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]]