题目
406. 根据身高重建队列
官方题解
方法一:贪心算法 + 排序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| class Solution {
public:
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
sort(people.begin(), people.end(), [](const vector<int>& u, vector<int>& v) {
return u[0] < v[0] || (u[0] == v[0] && u[1] > v[1]);
});
int n = people.size();
vector<vector<int>> res(n);
for (const vector<int>& person: people) {
int spaces = person[1] + 1;
for (int i = 0; i < n; i ++) {
if (res[i].empty()) {
--spaces;
if (!spaces) {
res[i] = person;
break;
}
}
}
}
return res;
}
};
|
时间复杂度:O(N^2),其中 N 是数组 people 的长度。排序的时间复杂度为 O(N log N),插入每个人的时间复杂度为 O(N)。
空间复杂度:O(N),需要使用一个大小为 N 的数组来存储结果。