JAVA程序设计:根据身高重建队列(LeetCode:406)

论坛 期权论坛 脚本     
已经匿名di用户   2022-7-2 21:51   2789   0

假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。

注意:
总人数少于1100人。

示例

输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]

输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

思路:我们先按照身高降序排序,然后再按k值升序排序,这样若当前人插到第ki个位置时,前边正好有ki个人不比他低,如果有比他低的人插在他前边也不会影响到他。

class Solution {
    public int[][] reconstructQueue(int[][] people) {
     
     Arrays.parallelSort(people,(o1,o2)->o1[0]==o2[0]?o1[1]-o2[1]:o2[0]-o1[0]);
     
     LinkedList<int[]> list=new LinkedList<>();
     
     for(int[] i : people) 
      list.add(i[1],i);
     
     return list.toArray(new int[list.size()][2]);
    }
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP