leetcode 406. 根据身高重建队列

题意

将一群人按排好序,然后制定了一个规则为people[i]=[hi,ki];hi表示该位置人的身高,ki表示i前面身高大于或等于i身高的人数

思路

按身高从小到大的顺序放入队列中,i前面有身高比他低的人对ki的值没有影响,所以可以假设后面放进来的都是比前面身高高的,
这样我们可以根据k值来决定该点应该放入的位置。对于身高相同的人来说,因为后放代表会对前面放的产生影响,所以我们可以规定身高相同的k值越大,身高越小。

code:

class Solution {
private:
    static bool cmp(vector<int>&u,vector<int>&v){
        return u[0]<v[0] || (u[0]==v[0] && u[1]>v[1]);
    }
public:
    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
        sort(people.begin(),people.end(),cmp);
        int n=people.size();
        vector<vector<int>>ans(n);
        for(int i=0;i<people.size();i++){
            int space=people[i][1]+1;
            for(int j=0;j<n;j++){
                if(ans[j].empty()){
                    space--;
                    if(!space) ans[j]=people[i];
                }
            }
        }
        return ans;
    }
};

posted @ 2020-12-18 21:47  voids5  阅读(57)  评论(0编辑  收藏  举报