欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

406. 根据身高重建队列

程序员文章站 2022-04-17 13:26:14
...

题目:

406. 根据身高重建队列
406. 根据身高重建队列

题解:

406. 根据身高重建队列

406. 根据身高重建队列

/**
 * 解题思路:先排序再插入
 * 1.排序规则:先按照高度 H 降序排序,再按照 K 个数升序排序(if the heights are equal, compare k-values)
 * 2.遍历排序后的数组,根据 K 插入到 K 的位置上
 *
 * 核心思想:高个子先站好位,矮个子插入到 K 位置上,前面肯定有 K 个高个子,矮个子再插到前面也满足 K 的要求
 *
 * @param people
 * @return
 */

代码:

import java.util.*;

public class code406 {

    public static int[][] reconstructQueue(int[][] people) {
        // 排序规则:先按照高度 H 降序排序,再按照 K 个数升序排序
        // if the heights are equal, compare k-values
        Arrays.sort(people, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1]: o2[0] - o1[0]);
        List<int []> list = new LinkedList<>();
        // 遍历排序后的数组,根据 K 插入到 K 的位置上
        for(int person[]: people)
        {
            // System.out.print("[" + person[0] + "," + person[1] + "]" + " ");
            int k = person[1];
            list.add(k, person);
        }
        // 转化为数组
        return list.toArray(people);
    }

    public static void main(String[] args) {
        int people[][] = { { 7, 0 }, { 4, 4 }, { 7, 1 }, { 5, 0 }, { 6, 1 }, { 5, 2 } };

        int res[][] = reconstructQueue(people);

        System.out.println();
        for(int i = 0; i < res.length; i++)
        {
            System.out.print("[" + res[i][0]+ "," + res[i][1] + "]" + " ");
        }
        System.out.println();
    }
}

参考:

  1. 根据身高重建队列
  2. 406. 根据身高重建队列–Java–先排序再插入
  3. 406-根据身高重建队列-8行代码实现-C++
  4. 406. 根据身高重建队列-排序后插入

附:Java中Arrays.sort()自定义数组的升序和降序排序

// o1 - o2 是升序排序,o2 - o1 是降序排序
Arrays.sort(people, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1]: o2[0] - o1[0]);
  1. Java中Arrays.sort()自定义数组的升序和降序排序
  2. Java中Arrays.sort()自定义数组的升序和降序排序
  3. Java中Array.sort()的几种用法
  4. java自定义对象排序