zoukankan      html  css  js  c++  java
  • LeetCode406:根据身高重建队列

    题目描述:

    题目意思是,给定一个people二维数组,里面放的是1*2的一维数组,其第一个元素是身高,第二个元素是原始队列中该位置前面身高大于等于此身高的人数,题目要求将这个打乱了的队列恢复到之前的样子。

    解题思路:

    通过观察可以知道,应该先排个子高的人,他们的相对位置确定之后,比他们低的人进队将不会影响他们的相对位置;因此需要对people数组做如下排序:

    1、相同身高的人,按照k升序排列;

    2、不同身高的人,按照身高降序排列。

    将上述排列后的people的元素按顺序插入到位置k上,也就是说,每次插入的时候,保证插入的元素前面比其高的人的个数为k,这样就能得到原始队列的顺序了。

    具体代码如下:(参考了官方的代码)

     1 class Solution {
     2     public int[][] reconstructQueue(int[][] people) {
     3         Arrays.sort(people, new Comparator<int[]>(){ //重写compare方法
     4             @Override
     5             public int compare(int[] o1 , int[] o2){
     6                 return o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0]; //相同身高的,按照k升序排,不同身高的按照身高降序排
     7             }
     8         });
     9 
    10         List<int[]> result = new LinkedList<>();
    11         for(int[] p : people){
    12             result.add(p[1] , p);//始终保证队列前面有k个身高大于等于p[0]的人
    13         }
    14         int len = people.length;
    15         return result.toArray(new int[len][2]);
    16     }
    17 }
  • 相关阅读:
    Postfix邮件服务
    Python
    LVS
    MFS
    Apache
    Zookeeper集群 + Kafka集群 + KafkaOffsetMonitor 监控
    shell 检测安装包
    shell ssh 批量执行
    shell 判断脚本参数
    bzoj 1500 修改区间 splay
  • 原文地址:https://www.cnblogs.com/zhang-yi/p/12865539.html
Copyright © 2011-2022 走看看