LeetCode 406.根据身高重建队列

LeetCode 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]]

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        
    }
}

题目分析

队列中每一个人都能够知道身高≥自己且排在前面的人数(K值)…

题目解法

当一个人插入这个队列时,只需要在意前面的有几个身高≥自己的就行。如果插入之前,这个队列的身高全都是 ≥ 自己的,那么只需要根据自己的K值插入指定位置就可以了,这时候是满足条件的;

后面插入的人身高只要满足 ≤ 队列的所有人,那么就可以用上述方法,所以我们需要实现一个能从高到低插入的队列。

    public int[][] reconstructQueue(int[][] people) {
        //将people进行排序(身高降序,身高相等则K升序)
        Arrays.sort(people,(people0,people1)->{
            return people0[0] == people1[0] ? people0[1] - people1[1] : people1[0] - people0[0];
            });
        //新建一个队列,从高到低逐一插入(people的排序保证每次插入之前,队列是没有低于插入值的)
        LinkedList<int[]> list = new LinkedList();
        for(int[] p : people){
       //根据K值插入到指定的位置
            list.add(p[1],p);
        }
        //链表转化数组
        return list.toArray(new int[list.size()][]);
    }

心得

莫得,只知解法,不知怎么想到,脑废了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值