1. 思路
本题可巧妙应用insert函数,如果熟悉insert函数,就会发现k刚好可以作为insert函数的参数,表明插入的位置。插入之前需要对从高到低进行排序。
2. 代码
注意排序的时候sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错:invalid use of non-static member function
因为:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中调用非静态成员函数。静态成员函数或者全局函数是不依赖于具体对象的, 可以独立访问,无须创建任何对象实例就可以访问。同时静态成员函数不可以调用类的非静态成员。(参考自https://blog.youkuaiyun.com/cinderella_niu/article/details/43227221)
class Solution {
public:
static bool mufun(vector<int> a, vector<int> b){
if(a[0] == b[0]) return a[1] < b[1];
else return a[0]>b[0];
}
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
sort(people.begin(), people.end(), mufun);
vector<vector<int>> res;
for(int i=0; i<people.size(); i++){
res.insert(res.begin()+people[i][1], people[i]);
}
return res;
}
};