代码随想录第35天 | 860.柠檬水找零 、 406.根据身高重建队列 、 452. 用最少数量的箭引爆气球

一、前言

参考文献:代码随想录

今天还是贪心,所以继续贪吧!

二、柠檬水找零

1、思路:

一开始我是没有什么正确思路的,但是我一问GPT教授时,看到两个变量,我就明白了。。

int five = 0;
int ten = 0;

(1)首先定义两个参数,记录五和十的个数,因为这两个数字是可以作为找零的数字;

(2)循环遍历bills 分为三种情况,分别是20,10,5,分别做不同的处理;

2、整体代码如下:

class Solution {
public:bool lemonadeChange(vector<int>& bills) {int five = 0;int ten = 0;for (int i = 0; i < bills.size(); i++) {if (bills[i] == 10) {if (five == 0) {return false;} else {five--;ten++;}} else if (bills[i] == 20){if (ten >= 1 && five >= 1) {ten--;five--;} else if (five >= 3){five -= 3;} else {return false;}} else {five++;}}return true;}
};

三、根据身高重建队列

1、思路:

我拿到这个题目我并不知道怎么去下手。虽然我看到了提示语:“这一题和“分发糖果”类似,也是分别先顾一边,再顾另一边”;

但是 我还是毫无头绪;

然后卡个的思路是这样的:

(1)首先按照身高排序,才会发现只有这样排序才会便于去比较;

(2)然后用在排序的时候身高相同,那么就只需要比较后面的k的大小了,k小的排前面,因为后期的插入需要用到k;

(3)遍历people,按照k的添加到指定的位置;

2、整体代码如下:

class Solution {
private:static bool cmp(const vector<int>& a, const vector<int>& b) {// 当身高相等时,k小一点的人排在前面if (a[0] == b[0]) return a[1] < b[1];// 一般按身高排return a[0] > b[0];}
public:vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {// 排序sort (people.begin(), people.end(), cmp);// 创建返回数组vector<vector<int>> result;// 遍历插入for (int i = 0; i < people.size(); i++) {int position = people[i][1];result.insert(result.begin() + position, people[i]);}return result;}
};

但是这里的insert函数非常消耗时间,所以推荐使用的是链表,可以节省很多的时间;

优化如下:

class Solution {
private:static bool cmp(const vector<int>& a, const vector<int>& b) {// 当身高相等时,k小一点的人排在前面if (a[0] == b[0]) return a[1] < b[1];// 一般按身高排return a[0] > b[0];}
public:vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {// 排序sort (people.begin(), people.end(), cmp);// 创建返回数组list<vector<int>> result; // list的底层是链表// 遍历插入for (int i = 0; i < people.size(); i++) {int position = people[i][1];// 设置相对应的类型指针std::list<vector<int>>::iterator it = result.begin();// 找到指定位置while (position--) {it++;}result.insert(it, people[i]);}return vector<vector<int>>(result.begin(), result.end());}
};

 四、用最少数量的箭引爆气球

1、思路:

重叠区间:即两个范围相交,然后找最大值

(1)首先对数组进行排序,可以按照左边界进行排序,也可以按照右边界进行排序。这里按照的是左边界,以小到大;

(2)接着是判断数组是否为空,不为空就可以设置初始化箭为1,因为最少需要一支箭射穿气球;

(3)遍历数组:

如果,前一个气球的右边界没有于后一个气球的左边界重合的话,那么就需要添加箭矢了;

除此之外,那就是重合,那就可以更新右边界去比较了,在前一个气球的右边接和后一个气球的右边界选取一个最小的值作为新的边界即可;

2、整体代码如下:

class Solution {
private:// 按照左边界的大小进行排序static bool cmp (const vector<int>& a, const vector<int>& b) {return a[0] < b[0];}
public:int findMinArrowShots(vector<vector<int>>& points) {if(points.size() == 0) return 0;int result = 1; // 只要数组不为空,那么就至少使用一把弓箭射穿sort(points.begin(), points.end(), cmp);for (int i = 1; i < points.size(); i++) {if (points[i][0] > points[i - 1][1]) { // 这种情况就是不相交result++;} else { // 边界相碰撞也可以一支箭射穿// 更新后边界points[i][1] = min(points[i - 1][1], points[i][1]);}}return result;}
};

今日学习时间:1.5小时

leave message:

 Life is a pretty gilr...

 

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

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

相关文章

【每日刷题】Day8

【每日刷题】Day8 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 459. 重复的子字符串 - 力扣&#xff08;LeetCode&#xff09; 2. 58. 最后一个单词的长度 - 力扣&a…

联想电脑VMware虚拟机VT开启虚拟化

以联想电脑为例。 关机重启&#xff0c; 有的电脑是按F2&#xff0c; 有的是按fnF2 进入BIOS&#xff0c;左右键&#xff0c;选择Configuration&#xff0c; 再上下键选择 Intel Virtual Technology 按回车键&#xff0c;再按上下键选择 Enable &#xff0c;回车确认。 按fn…

访问网站时你的电脑都做了什么

电脑在访问百度时 首先在本地hosts文件里面查看本地有无域名对应的IP地址&#xff0c;若有就直接返回。若无&#xff0c;则本地DNS服务器当DNS的客户&#xff0c;向其它根域服务器发送报文查询IP地址&#xff0c;简单来说就是帮助主机查找IP&#xff0c;所以递归查询就在客户端…

Yalmip使用教程(7)-求解器的参数设置

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译&#xff1a;https://yalmip.github.io/tutorials/ 这篇博客将详细介绍yalmip工具箱中常用的求解器设置选项。 1.求解器的基本设置 使用sdpsettings函数可以对求解的相关参数进行设置。最常用的设置…

ChatGPT/GPT4科研应用与绘图技术及论文写作

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

链式二叉树经典OJ题目(二)

目录 结构体及头文件&#xff1a; 1.二叉树的前序遍历 题目描述&#xff1a; 思路分析&#xff1a; 源码&#xff1a; 2.二叉树的翻转 题目描述&#xff1a; 思路分析&#xff1a; 源码&#xff1a; 3.另一颗子树 题目描述&#xff1a; 思路分析&#xff1a; 源码&…

美团一面:说说synchronized的实现原理?问麻了。。。。

引言 在现代软件开发领域&#xff0c;多线程并发编程已经成为提高系统性能、提升用户体验的重要手段。然而&#xff0c;多线程环境下的数据同步与资源共享问题也随之而来&#xff0c;处理不当可能导致数据不一致、死锁等各种并发问题。为此&#xff0c;Java语言提供了一种内置…

数据库讲解---(SQL语句--表的使用)【MySQL版本】

零.前言 数据库讲解&#xff08;MySQL版&#xff09;&#xff08;超详细&#xff09;【第一章】-CSDN博客 数据库-ER图教程_e-r图数据库-CSDN博客 数据库讲解&#xff08;MySQL版&#xff09;&#xff08;超详细&#xff09;【第二章】【上】-CSDN博客 一.SQL概述 1.1SQL简…

网工内推 | 深信服、宁德时代,最高20K招安全工程师,包吃包住

01 深信服科技 招聘岗位&#xff1a;安全服务工程师 职责描述&#xff1a; 1.负责现场安全服务项目工作内容&#xff0c;包含渗透测试、安全扫描、基线核查、应急响应等&#xff1b; 2.协助用户完成安全测试漏洞整改、复测工作&#xff1b; 3.为用户提供网络、主机、业务系统等…

c语言 :柔性数组与c/c++内存领域的划分

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一 柔性数组&#xff08;1&#xff09;什么是柔性数组1&#xff09;柔性数组的声明2&#xff09;柔性数组的特性 &#xff08;2&#xff09;柔性数组的使用 二 c/c内…

C++类与对象中(个人笔记)

类与对象中 类的6个默认成员函数1.构造函数1.1特性 2.析构函数2.1特性 3.拷贝构造函数3.1特性 4.赋值运算符重载4.1特性 5.日期类的实现6.const成员6.1const成员的几个问题 7.取地址及const取地址操作符重载 类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为…

硬盘容量骤降为0?原因解析与数据恢复秘籍

当我们打开计算机&#xff0c;准备进入日常的工作或娱乐时&#xff0c;突然发现硬盘容量显示为0&#xff0c;这无疑是一个令人头痛的问题。硬盘&#xff0c;作为我们存储重要数据和文件的关键设备&#xff0c;一旦容量显示为0&#xff0c;就意味着我们可能面临数据丢失的风险。…