【力扣刷题 | 第二十天】

目录

前言:

406. 根据身高重建队列 - 力扣(LeetCode)

452. 用最少数量的箭引爆气球 - 力扣(LeetCode)

总结:


前言:

今天刷贪心算法的题目

406. 根据身高重建队列 - 力扣(LeetCode)

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

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

很多小伙伴在看到这道题的时候就直接蒙圈了,并没有清楚题目的要求,在这里我详细讲解一下:本题的意思是:people数组中每一个元素都有(a,b),a表示当前人的身高,b表示有在排好的序列中几个人比他高或者一样高(从左向右),一开始给出的顺序是乱序,我们要做的就是对这些元素进行排序,确保排序结果满足每一个元素中的b条件(从左往右数有多少个人大于等于自己的身高)。

其实这道题和我们之前刷过的分发糖果问题还是有一定的相似度,例如我们都要考虑两个维度,分发糖果是既要考虑比左边的人多,又要考虑比右边的人多,而这个就是既要考虑人数符合要求,还要考虑到高度符合要求,而我们解决问题的宏观思想也是一样的:分步求解!

我们用案例来给大家讲解:

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

此时我们先对身高进行排序(从高到低):

 那么此时在每一个人前面的一定是身高大于或等于自己身高的人,此时再根据给定数组中的自己前面的人数进行插入就好了,因为此时前面的都是大于等于自己身高的,因此有几个人比自己高,就把自己插到第[i]个位置上就好了。而插入是不会影响其他的数字的,因为我们是从后往前插入,那么插入加进来的时候,自己的左边和右边一定都比自己大,也就是说插入的元素并不会影响后面元素的前面的大于等于自己身高的人数。

例如:[7,0][7,1][6,1]

因为此时身高为6的要求只能有一个人身高比自己高,那么就插到[7,0]后面,变为[7,0][6,1][7,1],而[6,1]的插入并不会影响[7,1]前面比自己大的元素个数。

按照这种思想,最终就可以得到结果:

解法: 

class Solution {
public:static bool compare(const vector<int>& a, const vector<int>& b){if(a[0]==b[0]){return a[1]<b[1];}return a[0]>b[0];}vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort(people.begin(),people.end(),compare);vector<vector<int>>que;for(int i=0;i<people.size();i++){int poision = people[i][1];que.insert(que.begin() + poision, people[i]);}return que;}
};

452. 用最少数量的箭引爆气球 - 力扣(LeetCode)

有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。

一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足  xstart ≤ x ≤ xend,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限地前进。

给你一个数组 points ,返回引爆所有气球所必须射出的 最小 弓箭数 。

 这道题太过于抽象,我们用画图来解释一下:横线就相当于气球,我们的弓箭只能垂直于x轴发射,只要穿过横线,就认为是爆炸,求最少多少只弓箭能让气球全部爆炸。我们要想用较少的弓箭射爆最多的气球,也就是首先尽量让气球重叠,其次就是让弓箭射重叠区域多的位置,而让气球尽量重叠,就是对气球进行排序,把[10,16],[2,8],[1,6],[7,12]先进行一个排序,排序顺序无所谓,从大到小或从小到大都无所谓,画图可得:

 而要想要这些排序好的气球爆炸,最少的方法就是:

在这两个位置释放弓箭,便可以用最小的弓箭数量射爆全部的气球。

在代码的逻辑上就是:

         如果这个气球的左边界小于上一个气球的右边界,那么这两个气球就是可以一起射爆的。

class Solution {
public:int findMinArrowShots(const vector<vector<int>>& points) {if (points.empty()) return 0;int result = 1;int prevEnd = points[0][1];int i = 1;while (i < points.size()) {if (points[i][0] > prevEnd) {++result;prevEnd = points[i][1];++i;}else {prevEnd = min(prevEnd, points[i][1]);++i;}}return result;}
};

总结:

贪心算法题到后面思路上很难有创新,主要都是代码实现上的困难。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win键无效,键盘Win组合键突然不不能用如何解决?

电脑win键失效怎么办&#xff1f; 在使用windows系统的时候&#xff0c;发现一个问题&#xff0c;就是win键失效了&#xff0c;怎么按都没有反应&#xff0c;该怎么办呢&#xff1f; 键盘方面的原因 此时之是键盘的原因与系统本身没有关系&#xff0c;键盘屏蔽热键主要目标是…

汽车的空气悬架的功能以及发展趋势

空气悬架能实现什么功能以及发展趋势 了解空气悬架之前,首先得快速了解什么是悬架。 教科书说法是: 悬架系统是汽车的车架与车桥或车轮之间的一切传力连接装置的总称。悬架系统基本构成有弹性元件(各类弹簧,缓冲作用);减震元件(减震器,减震作用);导向机构(控制臂等…

Pytorch如何打印与Keras的model.summary()类似的输出

1 Keras的model.summary() 2 Pytorch实现 2.1 安装torchsummary包 pip install torchsummary2.2 代码 import torch import torch.nn as nn import torch.nn.functional as F from torchsummary import summaryclass Net(nn.Module):def __init__(self):super(Net, self).__…

STM32驱动ADS1256串口输出-AD转换

STM32驱动ADS1256串口输出-AD转换 ADS1256ADS1256简介芯片特点引脚说明模块相关寄存器与命令相关程序初始化 实验效果接线实验现象 ADS1256 ADS1256简介 ADS1256是TI推出的一款微功耗、高精度、8 通道、24 位高性能模数转换器。该芯片还带有4个可编程的I/O口、输入缓冲器和可编…

nginx基本2——配置文件详解(网页配置篇)

文章目录 一、基本了解二、nginx.conf配置参数2.1 调试参数2.2 必配参数2.3 优化性能参数2.4 event{}段配置参数2.5 网络连接参数2.6 fastcgi配置参数2.7 总结常配参数 三、http{}段配置参数3.1 配置结构3.2 精简配置网页3.3 location定义网页3.3.1 root path用法3.3.1 alias p…

初识mysql数据库之索引概念与磁盘效率问题

目录 一、索引的概念及作用 二、实际看看索引的效率提升 三、认识磁盘 1. 简单了解磁盘 2. 数据库文件存储位置 3. 定位扇区 4. 数据读取效率问题 5. 磁盘随机访问与磁盘连续访问 5.1 随机访问 5.2 连续访问 四、mysql与磁盘的交互 五、建立共识 一、索引的概念及…

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 三)

页面和自定义组件生命周期 在开始之前&#xff0c;先明确自定义组件和页面的关系&#xff1a; 自定义组件&#xff1a;Component装饰的UI单元&#xff0c;可以组合多个系统组件实现UI的复用。页面&#xff1a;即应用的UI页面。可以由一个或者多个自定义组件组成&#xff0c;E…

MySQL索引和事务

索引和事务 1. 索引1.1 概念1.2 作用1.3 使用1.4 索引的存储方式 2. 事务2.1 概念2.2 使用2.3 事务的基本特性2.4 事务的隔离级别 1. 索引 1.1 概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引&#xff0c; 并指定…

Vue通过微软官方链接预览pptx docx xlsx

目录&#xff1a; 一、实现步骤 二、实现效果 代码真实可用&#xff01; 一、实现步骤&#xff1a; 1、使用的是vue和elementUI&#xff0c; 假设有这些变量&#xff1a;attachment是附件的意思 data() {return {previewDialog: false,attachmentSrc: ,attachmentList: [{name:…

【无标题】visual studio2019+Qt5.15.2+PCL1.12.1+vtk9.1.0+cmake3.22.2

安装VS------安装Qt-------安装PCL------安装cmake-----安装VTK-----环境配置 安装用了两天时间 1环境搭建 1.1 Visual Studio 2019 (PCL所需版本) https://my.visualstudio.com/Downloads?qvisual%20studio%202019&wt.mc_idomsftvscom~older-downloads 1.2 Qt安装 …

远程访问本地jupyter notebook服务 - 无公网IP端口映射

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook&#xff0c;它是一个交互式的数据科学和计算环境&#xff0c;支持多种编程语言&#xff0c;如…

所有语言数据类型大汇总(持续更新)

一 c语言 参考 C语言-整数&#xff1a;short、int、long、long long&#xff08;signed和unsigned&#xff09;、原码、反码、补码_c语言signed是什么类型_Talent Q的博客-CSDN博客https://blog.csdn.net/qq_43177371/article/details/105703234 二 system verilog