假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
注意:
总人数少于1100人。
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
vector<vector<int>> output;
std::sort(people.begin(), people.end(), greater<vector<int>>());
int g = 0;
while (g < people.size()) {
int r = g;
while (r + 1 < people.size() && people[r][0] == people[r + 1][0])
r++;
for (int i = r; i >= g; i--) {
if (people[i][1] < output.size()) {
output.insert(output.begin() + people[i][1], people[i]);
continue;
}
output.push_back(people[i]);
}
g = r + 1;
}
return output;
}

本文介绍了一种解决特定队列重建问题的算法。该算法针对一群由身高和相对位置描述的人,通过排序和插入操作,精确地重建了原始队列。文章详细解释了算法的工作原理,并提供了完整的代码实现。

422

被折叠的 条评论
为什么被折叠?



