题意:

一个二维数组,表示一列人,每个人用一个[h, k]数组描述,h表示这个人的身高,k表示队列前面身高大于等于这个人的数目。

分析:

比如:

[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

无论是h还是k,都不能作为排序的依据,没什么规律可言。那么,这个排序事件最最核心的就是:前面比我还高的人数。要满足这个条件。

比如[6,1]  前面比它高的人数是1 ,就是7 (两个5相当于没有)

所以抽离出来:[7,0] [6,1] 是这样的。

我们发现[7,0]的0就表示前面有0个比他高的,所以在角标0,[6,1]的前面有1个比他高的所以在角标1.但是为什么最后变成了[5,0],[7,0],[5,2],[6,1]呢?因为[5,?]不影响[6,1]相对位置的正确性,所以使其角标不等于k.意思就是说,更矮的人,可能使更高的人的k从等于角标变成大于角标。变化之后是没什么规律的。但是变化之前k==角标。

所以我们抓住这个重点:当队列里的人的身高都大于等于自己的身高的时候,自己的k值就是角标。

所以我们要解题的关键就是:使一组身高[h,?]排入队列的时候,队列里只有比它高的或者一样高的。也就是说从高到低放入(插入)一个新队列。

public class Solution {
public int[][] reconstructQueue(int[][] people) {
Arrays.sort(people, new Comparator<int[]>() {  //排序的目的是为了先处理高的
public int compare(int[] a, int[] b) {
if (b[0] == a[0])     //高度相等的时候,k小的在前面
return a[1] - b[1];  //否则ArrayList.add()可能越界
return b[0] - a[0];
}
});
ArrayList<int[]> al = new ArrayList<>();  //因为要插入,所以使用动态数组
for (int i = 0; i < people.length; i++)
al.add(people[i][1], new int[]{people[i][0], people[i][1]});  //根据k直接站到相应角标位
int i = 0;
for (int[] a : al) {
people[i][0] = a[0];
people[i][1] = a[1];
i++;
}
return people;
}
}

leetcode_middle_2_406. Queue Reconstruction by Height相关推荐

  1. LeetCode 406 Queue Reconstruction by Height

    #LeetCode 406. Queue Reconstruction by Height 原题链接: Queue Reconstruction by Height ###题目大意: 有一个由[h,k ...

  2. LeetCode 406. Queue Reconstruction by Height 题解(C++)

    LeetCode 406. Queue Reconstruction by Height 题解(C++) 题目描述 Suppose you have a random list of people s ...

  3. LeetCode 406. Queue Reconstruction by Height

    原题链接在这里:https://leetcode.com/problems/queue-reconstruction-by-height/description/ 题目: Suppose you ha ...

  4. LeetCode Queue Reconstruction by Height(贪心)

    问题:给出一个数组,数组中的元素有两个成员,一个表示高度,一个表示在它前面不小于它的个数,要求根据高度重建 思路:如果高度不相等,按高度降序,否则按个数升序 具体代码参考: https://githu ...

  5. [Leetcode] 406. Queue Reconstruction by Height 直觉解释

    https://leetcode.com/problems/queue-reconstruction-by-height/ 首先,我们找到最小的 height (h, k),这个数据对的最终位置应该是 ...

  6. 406. Queue Reconstruction by Height

    这题本质上是贪心法, 一个原则 "只有比你身高高的或者相等的才对你有影响,插入任何比你小的人都对你没影响" 因此从大到小排列,先处理大的,再处理小的.每次处理时K 就是插入的位置, ...

  7. leetcode算法题--Queue Reconstruction by Height

    原题链接:https://leetcode.com/problems/queue-reconstruction-by-height/ bool cmp(vector<int> a, vec ...

  8. leetcode 406. Queue Reconstruction by Height | 406. 根据身高重建队列(Java)

    题目 https://leetcode.com/problems/queue-reconstruction-by-height/ 题解 思路:先排序,后插入. 看到 答案 中的一句话,恍然大悟了: 第 ...

  9. 30/100. Queue Reconstruction by Height

    假设有一个随机的排队的人的列表.每个人都由一对整数 (h, k) 来描述,其中h是人的身高,k是这个人前面身高大于或等于h的人数.要求编写一个算法来重建队列. 首先将身高从高到底排列,对排好序的sor ...

最新文章

  1. Entity Framwork CodeFirst 学习笔记一:EF 概念和初次接触CodeFirst
  2. java ssh工具类_JAVA SSH2工具类
  3. Hive 窗口分析函数
  4. shell取消键盘回显
  5. 云炬随笔20180419
  6. flyway版本号_数据库版本管理工具-flyway
  7. 检测raid类型和磁盘坏道脚本
  8. Golang Tips
  9. (49)FPGA状态机描述(二段式)
  10. css 查看更多_Cirrus(原型制作CSS框架)下载-Cirrus(原型制作CSS框架)v0.6.0免费版下载...
  11. Eclipse字体调整
  12. LFS8.0完全安装搭建制作教程
  13. true_fn和false_fn输出的dtype类型不一致怎么办
  14. Smoke Loader、AZORult木马通过虚假海啸警报传播到了日本
  15. LeetCode力扣刷题——巧解数学问题
  16. 微信crm平台是什么系统?
  17. [ Cesium ] 根据卫星位置,建立实时动态连线
  18. 设计模式——抽象工厂 Java源代码
  19. 《王阳明心学营销》营销落地-知行合一
  20. CxImage学习使用1:环境搭建

热门文章

  1. uclinux开发概述
  2. 如何用Photoshop来磨皮人脸图
  3. 超级计算机 任务提交,超算任务提交系统slurm用法
  4. Python实现文本替换
  5. VsCode插件安装及推荐
  6. JSONObject转对象
  7. 软考-信息安全工程师-1
  8. Electron 主进程和渲染进程互相通信
  9. MySQL数据库中插入图片
  10. C++中sort()排序函数应用