LeetCode 406. 根据身高重建队列

lambda表达式简介 链接
lambda表达式中的升序和降序排列 的使用方式 链接

  1. 先按照h维度(第一维度)的身高顺序从高到低排序。确定第一个维度
  2. lambda返回的是一个元组:当x[0](维度h)相同时,再根据x[1](第二维度:前面的人数 k )从小到大排序(升序)
  3. 身高不同,则按照 (第一维度的)降序排列,即身高矮的在后面

在这里插入图片描述
原题链接

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        /*
        按照身高h来排序呢,身高一定是从大到小排(身高相同的话则k小的站前面),让高个子在前面
        可以确定一个维度了,就是同一 身高,前面的节点一定都比本节点高!
        只需要按照k为下标重新插入队列就可以了

        局部最优:优先按身高高的people的k来插入。插入操作过后的people满足队列属性
        全局最优:最后都做完插入操作,整个队列满足题目队列属性
        局部最优可推出全局最优,找不出反例,那就试试贪心。

        先按照h维度的身高顺序从高到低排序。确定第一个维度
        lambda返回的是一个元组:当x[0](维度h)相同时,再根据x[1](维度k)从小到大排序

        根据每个元素的第二个维度k,贪心算法,进行插入
        people已经排序过了:同一高度时k值小的排前面。
         */
        Arrays.sort(people, (a, b) -> {
            //用a b来表示两个人,当a b的第一维度即身高相同的时候,其按照第二维度的升序排列
            if (a[0] == b[0]) return a[1] - b[1];
            //若身高不同,则按照 降序排列,即身高矮的在后面
            return b[0] - a[0];
        });

        LinkedList<int[]> que = new LinkedList<>();
        //使用增强for循环,将people中的元素赋值给p数组,然后将p中的元素都放入到一个列表中
        for (int[] p : people) {
            que.add(p[1],p);
        }
        //最后返回的是将队列转换成数组的形式,其长度是people的长度
        return que.toArray(new int[people.length][]);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值