假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
406 Queue Reconstruction by Height 根据身高重建队列
注意:
总人数少于1100人。
示例
1 | 输入: |
思路
我们先观察这一组数据[3,0][3,1][2,1]
,如果我们先按顺序一个一个来,先得到[3.0],[3,1]
这样的数据,再插入的[2,1]
的时候要插入到[3,0]
和[3,1]
之间,而不是[3,1]
之后。
我们发现,当我们插入的h值小于已存在的h值时,无论插哪个位置都可以。
所以,当我们按h值降序排列,k值升序排列之后,在按下标插入即可。
代码
1 | public int[][] reconstructQueue(int[][] people) { |
惊奇的发现,同样的代码,只是用了lambda表达式,在LeetCode上的速度就会慢5倍左右。