栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

89、★★贪心-多维度-LeetCode-406.根据身高重建队列

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

89、★★贪心-多维度-LeetCode-406.根据身高重建队列

题目描述:

假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。

请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。

来源:力扣(LeetCode)

中国人寿秋招面试题

思路:

1)想到了按身高由高到低排序,也想到了插空进去;但是不知道具体怎么插空!

2)排序方法,参数传入Comparator比较器!

按身高由高到低排序;在按照k由低到高排序!

        Arrays.sort(people, new Comparator() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[0] == o2[0]) return o1[1] - o2[1];
                return o2[0] - o1[0];
            }
        });

3)后插入的不影响先插入!

先按照最高的来进行插入,插入后当前的队列符合要求;在依次对身高较低的进行插孔,对整体不会产生影响!

最高的插孔,要么前面是一样高的;要么坐标就是0,最高的下标为0的只有一个!

后面更低的,下标值的影响,只能由前面身高的来影响;而其不管插入到哪儿,对前面高个子的标准没有影响!

代码:

1)二维的贪心:

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        //二维数组的维度,每行上的内容不改变,只调整行的顺序
        //按照身高由大到小排列!后面的总是小于前面的身高
        //按照身高,由高到低排序;同样的身高,就由低到高
        Arrays.sort(people, new Comparator() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[0] == o2[0]) return o1[1] - o2[1];
                return o2[0] - o1[0];
            }
        });
        //排好序
        List list = new ArrayList<>();//用链表进行 插空
        for(int[] p : people){
            list.add(p[1],p);//p[1]是下标,往特定位置插入
        }
        return list.toArray(new int[list.size()][2]);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/821631.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号