【LeetCode406】根据身高重建队列(贪心)
        【摘要】 
                    
                        
                    
                    1.题目 
  
2.思路 
第一步骤: 对于一样物体出现2个指标的时候,我们不妨先固定一个指标进行操作(如此题先对第一个指标身高进行从大到小排序,PS:小到大排序其实也是可以的),操作后就会使得每个当前...
    
    
    
    1.题目

 
2.思路
第一步骤:
 对于一样物体出现2个指标的时候,我们不妨先固定一个指标进行操作(如此题先对第一个指标身高进行从大到小排序,PS:小到大排序其实也是可以的),操作后就会使得每个当前人都比自己前面一坨人身高更低,而身高越低(越在右边的)的人的第二个指标(该人左边中,比该人高的人数)就应该越大,所以根据贪心的思想,再对第二个指标进行从小到大排序。
例如:示例1排完序:[[7,0],[7,1],[6,1],[5,0],[5,2],[4,4]]
新建一个二维vector:
[7,0]插入第0的位置
[7,1]插入第1的位置
[6,1]插入第1的位置,这时[7,1]就往后移一位了
第二步骤:
 由上面例子可以看到第一步骤后,[6,1]其实位置不对,前面有2个人比它大,说明我们还要进行最后一步操作——将第二指标匹配正确,类似直接插入排序一样遍历,将当前人放在前面中已排序部分的“正确位置”(PS:正确位置指以第二指标为位置下标,这样才能使第二指标正确)。
3.代码
class Solution {
private:
    static bool cmp(vector<int>& a,vector<int>& b){
        if(a[0]==b[0]){
            return a[1]<b[1];//身高越小的人的第二指标值越大
        }
        return a[0]>b[0];//身高从大到小排序
    }
public:
    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
        int n=people.size();
        sort(people.begin(),people.end(),cmp);
        vector<vector<int> >queue;
        for(int i=0;i<n;i++){
            int k=people[i][1];
            queue.insert(queue.begin()+k,people[i]);//把每个人放在该人下标为第二指标的位置
        }
        return queue;
    }
};
  
 - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。
原文链接:andyguo.blog.csdn.net/article/details/116108063
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)