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

LC406 根据身高重建队列

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

1.读题

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

2.解题思路

最开始的数组——

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

排序好的数组——

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

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

3.代码逻辑

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

【2】本题核心!进行上述的【1】【2】排序
6-5 【Arrays.sort方法的重写还要仔细理解】字节校园每日一题 LC406 根据身高重建队列 Java力扣刷题笔记_第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()][]);
    }
}

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

你可能感兴趣的:(力扣刷题,算法强化之路,#,力扣刷题笔记,队列,数据结构,排序算法,贪心算法)