当前位置: 首页 > article >正文

贪心算法解决根据身高重建队列问题

代码随想录链接:代码随想录

思路:

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

首先根据第一个维度h对原数组进行排序,让身高高的元素尽量排在数组前端

之后根据每个元素的第2个维度k确定该元素的插入位置,将该元素插入位置k处

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

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

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        // 身高从大到小排(身高相同k小的站前面)
        Arrays.sort(people, (a, b) -> {
            if (a[0] == b[0]) return a[1] - b[1];   // a - b 是升序排列,故在a[0] == b[0]的狀況下,會根據k值升序排列
            return b[0] - a[0];   //b - a 是降序排列,在a[0] != b[0],的狀況會根據h值降序排列
        });

        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][]);
    }
}


http://www.kler.cn/a/454336.html

相关文章:

  • React 高级组件开发:动态逻辑与性能优化
  • OpenCV相机标定与3D重建(35)计算两幅图像之间本质矩阵(Essential Matrix)的函数findEssentialMat()的使用
  • C++--------继承
  • C/C++ 数据结构与算法【哈夫曼树】 哈夫曼树详细解析【日常学习,考研必备】带图+详细代码
  • 结构体(初阶)
  • 【唐叔学算法】第19天:交换排序-冒泡排序与快速排序的深度解析及Java实现
  • .net framework wpf 打包免安装exe文件
  • leetcode hot100 环形链表
  • Redis 集群方案
  • 【Rust自学】7.2. 路径(Path)Pt.1:相对路径、绝对路径与pub关键字
  • Vue.js框架:在线教育系统的安全性与稳定性
  • k8s etcd 数据损坏处理方式
  • springboot使用自定义的线程池 完成 多线程执行网络请求,返回数据后,统一返回给前段
  • 计算机网络基础知识
  • vulnhub-matrix-breakout-2-morpheus
  • Rust : tokio中select!
  • 聊一聊 C#线程池 的线程动态注入
  • Flutter persistentFooterButtons控件详解
  • 【EI会议征稿】人工智能与遥感应用国际会议 (AIRSA 2025)
  • uniapp popup弹窗组件的自定义使用方法
  • Large Language Model based Multi-Agents: A Survey of Progress and Challenges
  • (补)算法刷题Day24: BM61 矩阵最长递增路径
  • 本地部署 LLaMA-Factory
  • 解决:excel鼠标滚动幅度太大如何调节?
  • (NIPS-2024)PISSA:大型语言模型的主奇异值和奇异向量适配
  • 社区二手物品交易小程序ssm+论文源码调试讲解