406. 根据身高重建队列

假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(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的升序排列
以本题给出例子为参考
排序之后如下: 7,0 7,1 6,1 5,0 5,2 4,4
先放入 7,0 7,1 接着要放入 6,1 1 代表其位置 所以: 7,0 6,1 ,7,1 接着放入 5,0
所以 5,0 7,0 6,1 ,7,1 依次类推 5,2 放入 在第二个位置
5,0 7,0 5,2 6,1 7,1 4,4 放入后 :
5,0 7,0 6,1 4,4 7,1 与预期相同

class Solution {
    public int[][] reconstructQueue(int[][] people) {
       // h 是这个人的身高 ,k是其前面 且身高不比其低 的人数
       //将h递减排序 将k按递增排序

       // o【0】代表h身高  o【1】 代表 k前面的人 
    Arrays.sort(people, new Comparator<int[]>() {
      @Override
      public int compare(int[] o1, int[] o2) {
        // if the heights are equal, compare k-values
        return o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0];
      }
    });
     List<int[]> output = new LinkedList<>();
     // 按照k放入列表  索引等于它们的 k 值
     //先放入的是 身高最高的,并且其位置 等于 他的k 值 即 p【1】
    
    for(int[] p : people){
      output.add(p[1], p);
    }
    //转为数组即可 
     int n = people.length;
    return output.toArray(new int[n][2]);

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值