11贪心:根据身高重建队列

11贪心:根据身高重建队列

406. 根据身高重建队列

本题有两个维度,h和k,看到这种题目一定要想如何确定一个维度,然后再按照另一个维度重新排列。

09贪心:分发糖果和此题有点点的像。

遇到两个维度权衡的时候,一定要先确定一个维度,再确定另一个维度。

如果两个维度一起考虑一定会顾此失彼

那么究竟先按h排序呢,还是先按照k排序呢?

如果按照k来从小到大排序,排完之后,会发现k的排列并不符合条件,身高也不符合条件,两个维度哪一个都没确定下来。

那么按照身高h来排序呢,身高一定是从大到小排(身高相同的话则k小的站前面),让高个子在前面。

此时我们可以确定一个维度了,就是身高,前面的节点一定都比本节点高!

java 复制代码
class Solution {
    public int[][] reconstructQueue(int[][] people) {
        //对身高进行从大到小的排序,然后根据k来调整顺序(先确定一个,再确定另一个)
        Arrays.sort(people, (p1, p2) -> {
            if(p1[0] == p2[0]) return p1[1] - p2[1];//身高一样k大在后
            return p2[0] - p1[0];//身高从大到小
        });

        LinkedList<int[]> que = new LinkedList<>();

        for(int[] p : people){
            que.add(p[1], p);//Linkedlist.add(index, value),会将value插入到指定index里。
        }

        return que.toArray(new int[people.length][]);
    }
}

局部最优:优先按身高高的people的k来插入。插入操作过后的people满足队列属性

全局最优:最后都做完插入操作,整个队列满足题目队列属性

局部最优可推出全局最优,找不出反例,那就试试贪心。

相关推荐
燃于AC之乐2 天前
我的算法修炼之路--4 ———我和算法的爱恨情仇
算法·前缀和·贪心算法·背包问题·洛谷
Snow_day.2 天前
有关排列排列组合(1)
数据结构·算法·贪心算法·动态规划·图论
2501_941805937 天前
一次从接口网关到异步消息驱动架构演化的互联网系统实践技术随笔分享录
leetcode·决策树·贪心算法
2501_941664967 天前
面向微服务分布式队列与异步流量削峰的互联网系统高可用设计与多语言工程实践分享
leetcode·贪心算法
汉克老师9 天前
GESP2025年12月认证C++五级真题与解析(编程题2 (相等序列))
c++·算法·贪心算法·中位数·质数分解
冰西瓜6009 天前
贪心(四)——拟阵 算法设计与分析 国科大
算法·贪心算法
长安er9 天前
LeetCode121/55/45/763 贪心算法理论与经典题解析
java·数据结构·算法·leetcode·贪心算法·贪心
汉克老师10 天前
GESP2025年12月认证C++五级真题与解析(判断题1-10)
c++·链表·贪心算法·排序·gesp5级·gesp五级
前端小L11 天前
贪心算法专题(十三):画地为牢的艺术——「划分字母区间」
javascript·算法·贪心算法
Coder_Boy_11 天前
基于SpringAI的智能AIOps项目:部署相关容器化部署管理技术图解版
人工智能·spring boot·算法·贪心算法·aiops