假设有搅乱顺序的一群儿童成一个队列_【算法打卡】根据身高重建队列

b8dd7bd8d577f5c6b5aea8c01a255b1d.png

难度:中等

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

注意:

    总人数少于1100人。

1a7857514dc901a148ced5a41cd22a5e.png

思路:

    先对输入数组排序,h升序,k降序,从头循环遍历,当前这个人就是剩下未安排的人中最矮的人,他的k值就代表他在剩余空位的索引值,如果有多个人高度相同,要按照k值从大到小领取索引值(例如上面遍历到[7,0],0有人了,那么就排在1,以此类推)。

代码

    public int[][] reconstructQueue(int[][] people) {        if (people.length ==0 || people[0].length == 0) return new int[0][0];        //按照身高降序 K升序排序        Arrays.sort(people, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0]);        List<int[]> list = new ArrayList<>();        //K值定义为 排在h前面且身高大于或等于h的人数        //因为从身高降序开始插入,此时所有人身高都大于等于h        //因此K值即为需要插入的位置        for (int[] i : people) list.add(i[1], i);        return list.toArray(new int[list.size()][]);    }

先这样,打工人好困

每天都在最后关头用掉一次一天唯一一次推文机会,

真环保(#^.^#)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值