这道题目有些难度,关键的突破点是排在这个人前面的身高大于或等于h的人数为k,所以如果一个人身高比这个人矮,排在前面,其实相当于看不见。
所以有了一种插队策略,假设我们按身高从大到小排序,然后身高相同时,k从小到大排序。
然后people[i] 就插入到people[1]的位置。
这样的策略总是合法的可行的。这样的时间复杂度是O(n^2)
class Solution {
public:
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
sort(people.begin(),people.end(),[](const vector<int> &a, const vector<int> &b){
return a[0]==b[0]?a[1]<b[1]:a[0]>b[0];
});
int n = people.size();
vector<vector<int>> res;
for(int i=0;i<n;i++){
res.insert(res.begin() + people[i][1], people[i]);
}
return res;
}
};