6-5 【Arrays.sort方法的重写还要仔细理解】字节校园每日一题 LC406 根据身高重建队列 Java力扣刷题笔记

LC406 根据身高重建队列

我的刷题笔记
根据身高重建队列

1.读题

在这里插入图片描述

2.解题思路

最开始的数组——

  • hi 为身高属性
  • ki 为这个人前面比他高的人数
  • 但是排序是随便儿排的

排序好的数组——

  • hi 为身高属性
  • ki 为这个人前面比他高的人数
  • 顺序是按照ki的规律排的

参考题解 先排序再插入
核心思路:“先排序后插入”
【1】先按高度 hi 降序排列
【2】再按 ki 升序排列
【3】接着遍历排序后的数组,根据ki插入到对应的的位置上

3.代码逻辑

【1】如果队列为空 返回 new int[0][0] —— 一个空的二位数组
在这里插入图片描述

【2】本题核心!进行上述的【1】【2】排序
在这里插入图片描述

惭愧的是 这个内容我没太搞懂
为什么要return person2[0] - person[1]

【3】遍历数组 根据k值填入对应位置 完成重建队列!

在这里插入图片描述

4.Java代码

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        int n = people.length;//身高hi值有几个
        int m = people[0].length;//ki值有几个
        if (n == 0 || m == 0){
            return new int[0] [0];
        }
        
        Arrays.sort(people, new Comparator<int[]>()
        {   
            public int compare(int[] person1, int[] person2){//01 重写出身高降序排列 k值降序排列的 方法
                if (person1[0] != person2[0]) return person2[0] - person1[0];//两人身高不同 进行降序排列
                else {
                    return person1[1] - person2[1];//若两人身高相同 升序排列
                }
            }
        } );
        // 02 遍历排序后的数组 根据k值插入到k的位置上 
        List<int[]> ans = new ArrayList<int[]>();
        for (int[] person : people) {
            ans.add(person[1], person);
        }
        return ans.toArray(new int[ans.size()][]);
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值