Leetcode 406 根据身高重建队列

题意理解

        people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]

        给定一个二维数组,(h,k)h表示此人身高,k表示前面有几个人比他高。

        我们按照每个人的h,k两个维度的需求给每个人排在合适的位置。

        如:

                [5,0][7,0][5,2][6,1][4,4][7,1]

        

解题思路

       采用贪心思路来解题,明确全局最优和局部最优。

       全局最优:每个人的位置满足其h,k的需求。

       对于每个人的位置,我们需要考虑两个维度。

       对于需要考虑多个维度的题目,我们可以逐个考虑,减小难度。

       1.首先考虑k维度。我们将k从小到大排,k相同时,h从小到大排。

        所以有:

                [5,0][7,0][6,1][7,1][5,2][4,4],其中[5,2],[4,4]位置错误

        2.考虑h维度,将h从大到小排,h相同时,k从小到大排。

        所以有:

                [7,0][7,1],[6,1][5,0],[5,2][4,4]

        我们发现:

                身高高的总是在前面,当一个元素如[6,1]前面比它大的多的时候,需要将其往前移

                因为前面每一个数都比他大,多以,一枝位置1处,其余后移即可。

                其前面满足条件的并不会因为一个身高比他们都低的人加入,而不满足其位置条件。

                依次类推:我们获得最终结果:

                        [5,0][7,0][5,2][6,1][4,4][7,1]

        所以局部最优即:将身高最高的人,优先安排合理的位置

1.贪心解题

我们用result来记录结果。在处理问题之前,我们需要首先根据身高从大到小排序,身高相同时,根据k升序排序。

public int[][] reconstructQueue(int[][] people) {
        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[]> result=new LinkedList<>();

        for(int i=0;i<people.length;i++){
            int position=people[i][1];
            result.add(position,people[i]);
        }
        //转数组
        return result.toArray(new int[people.length][]);
    }

2.分析 

时间复杂度:O(n^{2})  排序所需时间O(nlogn)+遍历插入O(n^{2})

空间复杂度:O(logn) 排序所需的栈空间

n为输入数组长度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/264936.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何提升亚马逊、速卖通店铺自然排名?测评自养号的关键要素

一、自然排名的重要性 一条链接是否推广成功或者赚到钱&#xff0c;就看这条链接的自然排名有没有打上来! 无论是搜索流量的自然排名&#xff0c;还是关联流量的自然排名&#xff0c;或BSR排行榜&#xff0c;这些自然排名的入口就是我们要时刻盯紧的位置。 二、自然排名的位…

C语言之字符串

目录 字符串字面量 ​编辑 字符串字面量的长度 ◆具有静态生命周期 ◆对于同一个字符串字面量的处理方式依赖于编译器 字符串 字符数组的初始化赋值 空字符串 字符串的读取 在前面的学习中就会发现&#xff0c;仅仅能用一个字符表示的事物少之又少&#xff0c;对于地…

【LeetCode 热题 HOT 100】题解笔记 —— Day03

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

职场利器-软考高级、PMP、CKA/CKS/CKAD备考

1、【软考高级】信息系统项目管理师 全国计算机技术与软件专业技术资格(水平)考试网上报名平台http://bm.ruankao.org.cn/sign/welcome 模拟作答系统230747 第一次裸考 考试成绩查询 三科均未通过 软考考试多少分通过? ​​​​​​​ 软考高级&#xff0c;它的考试科目是《…

黄鼠狼目标检测数据集VOC+YOLO格式400张

黄鼠狼是一种小型哺乳动物&#xff0c;通常分布在亚洲和欧洲的森林和草原地区。它们的身体长度约为30-50厘米&#xff0c;体重约为0.5-1.5千克。黄鼠狼的身体呈灰黄色&#xff0c;背部有黑色条纹&#xff0c;尾巴短而毛茸茸的。 黄鼠狼是一种夜行性动物&#xff0c;主要以小型…

网络通信--深入理解网络和TCP / IP协议

计算机网络体系结构 TCP/IP协议族 TCP / IP 网络传输中的数据术语 网络通信中的地址和端口 window端查看IP地址和MAC地址&#xff1a;ipconfig -all MAC层地址是在数据链路层的&#xff1b;IP工作在网络层的 MAC是48个字节&#xff0c;IP是32个字节 在子网&#xff08;局域…

TIA博途Wincc_通过VBS脚本实现电机风扇或水泵旋转动画的具体方法

TIA博途Wincc_通过VBS脚本实现电机风扇或水泵旋转动画的具体方法 前面和大家介绍了通过在PLC中编程,结合HMI的图形IO域实现电机风扇或水泵旋转动画的具体方法,详细内容可参考以下链接: TIA博途Wincc中制作电机风扇或水泵旋转动画的具体方法示例 本次和大家分享通过VBS脚本实…

智能图像编辑软件Luminar Neo mac提供多种调整和滤镜选项

Luminar Neo mac是一款由Skylum公司开发的AI技术图像编辑软件&#xff0c;旨在为摄影师和视觉艺术家提供创意图像编辑解决方案。Luminar Neo拥有强大的AI技术和丰富的后期处理工具&#xff0c;可帮助用户快速轻松地实现从基本到高级的图像编辑需求。 Luminar Neo提供了多种调整…

什么是Vue.js ? Vue相关介绍

vue介绍 vue官网&#xff1a;Vue.js (vuejs.org) a) Vue.js目前最流行的一个前端框架&#xff0c;三大主流前端框架之一。 b) AngularJS是Vue早期开发的灵感来源。然而&#xff0c;AngularJS 中存在的许多问题&#xff0c;在 Vue 中已经得到解决。 c) Vue.js是一套构…

idea 注入mapper报错报红的几种解决方案

文章目录 前言方法1&#xff1a;为 Autowired 注解设置required false方法2&#xff1a;用 Resource 替换 Autowired方法3&#xff1a;在Mapper接口上加上Repository注解方法4&#xff1a;用Lombok方法5&#xff1a;把IDEA的警告关闭掉方法6&#xff1a;不用管他 前言 相信大…

Linux系统LVS+Keepalived群集

目录 一、概述 &#xff08;一&#xff09;群集特性 1.负载均衡 2.健康检查&#xff08;探针&#xff09; 3.故障转移 &#xff08;二&#xff09;Keepalived 1.作用 &#xff08;1&#xff09;支持故障自动转移 &#xff08;2&#xff09;支持节点健康状态检…

WebGL开发三维解剖学应用

开发基于 WebGL 的三维解剖学应用通常涉及以下步骤。这些步骤包括创建三维模型、整合交互性、优化性能等&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.三维模型创建&#xff1a; 首先&#xff0…

Pytorch项目,肺癌检测项目之二

diameter_dict{} with open(/xunlian/annotations.csv &#xff0c;‘r’) as f: for row in list(csv.reader(f)[1:]): series_uid row[0] annotationCenter_xyz tuple([float(x) for x in row[1:4]]) annotationDiameter_mm float(row[4]) diameter_dict.setdefault(seri…

【GIS前言技术】甘肃积石山6.2级地震烈度图

12月18日23时59分&#xff0c;甘肃临夏州积石山县发生6.2级地震。地震发生后&#xff0c;应急管理部组织中国地震局派出地震现场工作队&#xff0c;依照《地震现场工作&#xff1a;调查规范》&#xff08;GB/T 18208.3-2011&#xff09;、《中国地震烈度表》(GB/T 17742-2020)&…

josef约瑟 电流继电器 RL-D1 电压AC220V 整定范围0-9.99AAC

系列型号 RL-D1型电流继电器&#xff1b; RL-D2型电流继电器&#xff1b; 基本参数 RL-D系列电流继电器用于发电机、变压器和输电线的过负荷和短路保护装置中作为启动元件。本继电器为集成电路型继电器&#xff0c;精度高、功耗小、动作时间快&#xff0c; 返回系数高、整定…

0.618算法和基于Armijo准则的线搜索回退法

0.618代码如下&#xff1a; import math # 定义函数h(t) t^3 - 2t 1 def h(t): return t**3 - 2*t 1 # 0.618算法 def golden_section_search(a, b, epsilon): ratio 0.618 while (b - a) > epsilon: x1 b - ratio * (b - a) x2 a ratio * (b - a) h_…

九:爬虫-MongoDB基础

MongoDB介绍 MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。它支持的数据结构非常松散&#xff0c;因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大&#xff0c;其…

Java设计模式-原型模式

目录 一、克隆羊问题 二、传统方式解决 三、基本介绍 四、浅拷贝和深拷贝 &#xff08;一&#xff09;浅拷贝介绍 &#xff08;二&#xff09;深拷贝 五、原型模式深拷贝 &#xff08;一&#xff09;重写clone方法 &#xff08;二&#xff09;对象序列化 六、注意事项…

法线贴图实现地形模型皱褶、凹凸不平的纹理效果

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 法线贴图在3D建模中扮演着重要的角色&#xff0c;它通过模拟表面的微…

es倒排索引以及分词

单词词典(Term Dictionary)是倒排索引的重要组成记录所有文档的单词&#xff0c;一般都比较大 记录单词到倒排排列表的关联信息 倒排列表(Posting List)记录了单词对应的文档集合&#xff0c;由倒排索项( Posting )组成倒排索项( Posting)主要包含如下信息: 文档Id&#xff0c…