代码随想录算法训练营第三十五天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
创始人
2025-05-30 02:08:17

860.柠檬水找零

题目链接
思路:
情况一:账单是5,直接收下。
情况二:账单是10,消耗一个5,增加一个10
情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5

class Solution {
public:bool lemonadeChange(vector& bills) {int five = 0, ten = 0, twenty = 0;for (auto bill : bills) {if (bill == 5) {five++;}if (bill == 10) {if (five == 0) return false;else {five--;ten++;}}if (bill == 20) {// 有10 没 5if (ten >= 1 && five >= 1) {ten--;five--;}//没10 5 >3else if (ten == 0 && five >= 3) {five -= 3;}else {return false;}}}return true;}
};

总结:难度不大,需要静下心来完成,思考每种情况,就很容易解决这道题。

406.根据身高重建队列

题目链接

**思路:**和分发糖果那道题类似,先进行一个维度上的排列,再对另一个维度进行排序。
首先对身高进行排序,从大到小排序,然后再对前面有几个进行选择插入。这里就要实现一个比较的方法,实现这个效果。

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

明显看是使用C++中的list(底层链表实现)比vector(数组)效率高得多。对使用某一种语言容器的使用,特性的选择都会不同程度上影响效率。

// 版本二
class Solution {
public:// 身高从大到小排(身高相同k小的站前面)static bool cmp(const vector& a, const vector& b) {if (a[0] == b[0]) return a[1] < b[1];return a[0] > b[0];}vector> reconstructQueue(vector>& people) {sort (people.begin(), people.end(), cmp);list> que; // list底层是链表实现,插入效率比vector高的多for (int i = 0; i < people.size(); i++) {int position = people[i][1]; // 插入到下标为position的位置std::list>::iterator it = que.begin();while (position--) { // 寻找在插入位置it++;}que.insert(it, people[i]);}return vector>(que.begin(), que.end());}
};

452. 用最少数量的箭引爆气球

题目链接

思路: 题目读起来很难受,但是实际做起来还是挺简单的。
首先对气球的左边界进行从小到大的排序,然后如下图所示。接着遍历数组,对当前气球的右边界和上一个气球的左边界进行比较,如果一家超过了,那么一定需要一根箭,当重叠的时候,降新的用于判断的边界换成重叠时候最小的边界,继续下一轮判断。
在这里插入图片描述

class Solution {
private:static bool cmp(const vector& a, const vector& b) {return a[0] < b[0];}
public:int findMinArrowShots(vector>& points) {if (points.size() == 0) return 0;sort(points.begin(), points.end(), cmp);int result = 1; // points 不为空至少需要一支箭for (int i = 1; i < points.size(); i++) {if (points[i][0] > points[i - 1][1]) {  // 气球i和气球i-1不挨着,注意这里不是>=result++; // 需要一支箭}else {  // 气球i和气球i-1挨着points[i][1] = min(points[i - 1][1], points[i][1]); // 更新重叠气球最小右边界}}return result;}
};

**总结:**理解起来很容易,但是自己想的时候感觉不容易想,不过边界排序这部分很熟悉了。

相关内容

热门资讯

普通插槽、具名插槽、作用域插槽 插槽 插槽就是子组件提供给父组件的占位符,用slot来表示,父组件可以在...
Go语言必知必会100问题-0... 减少代码的嵌套层数 软件开发中的“心智模型”用于描述开发人员在编码时心理活动,每段代码...
CSRF漏洞的概念、利用方式、... CSRF漏洞1.CSRF的概念1.1 什么是CSRF?1.2 基本攻击流程2.CSRF...
基于springboot开发的... 基于springboot开发的学生考勤管理系统 如需更多资料请前往文章底部获取联系方式 系统设计主要...
cocosCreator 之 ... cocosCreator版本: 3.7 简介 cocosCreator的工作流程是通...
vue2中$set的原理_它对... $set的作用背景动态添加属性,不使用$set动态添加属性,使用$set...
3/19考后总结 时间安排 8:30–8:50 读题,T1 感觉是乱搞题,T2 貌似可以二...
【JavaWeb】JDBC 目录 一、JDBC概述 1 JDBC概念 2 JDBC本质 3 JDBC好处 二,J...
python 多任务 一些概念 1.多任务 简单地说,就是同时可以运行多个任务。打个比方,你一...
基于springboot框架实... 基于springboot框架实现自习室预订系统的设计与实现 开发语言:Java 框架...
VMware Centos7 ... 接着开始在VMware中搭建我们的大前端环境。这里我已经在我本机安装好VMware虚拟机了。 Win...
JUC高级二: Java锁(上... JUC高级二: Java锁(上篇) 1. 乐观锁和悲观锁 synchronized关键字和Lock...
Go分布式爬虫笔记(八) 08_项目需求分析与架构设计 需求分析 业务需求 爬虫引擎为基础的推送系统 提供 快速的热点事...
【计量经济学】第一次作业(7、... 第二次 7.假设有人做了如下的回归: y i = β 0 ^ + β 1 ^ x i + e i ...
Java Iterator(迭... 简介 在Java中,如果我们需要遍历一个集合(Collection&#x...
作物杂交/记忆化搜索/记忆化数... 题解:本题用到了记忆化搜索:记忆化搜索,本质还是 动态规划...
Linux下是实现的 HTTP... 项目功能:(1)能接收客户端的GET请求;&...
运营数据分析模型—标签体系 标签体系 标签体系上是描述对象的一种机制,而标签作为标签体系的基本组成元素,用来描述对象具有某种属性...
在openSUSE-Leap-... 在openSUSE-Leap-15.4-DVD-x86_64中使用百度网盘AppImage 打开百度...
鸟哥的Linux私房菜 She... 第十二章、学习 Shell Scripts https://linux.vbird.org/linu...
2分钟快速了解!全网最详细的性...  目录:导读 Redis 简介 Redis 优势 Redis与其他key-value存...
设计模式-02 4,创建型模式 4.2 工厂模式 4.2.1 概述 需求:设计一个咖啡店...
纠错码中的汉明码,NAND F...      纠错码是一种用在不可靠的或者噪音比较大的通信信道中用来控制数据传输错误的技术。这种技术的核...
【Java】P14 面向对象(... 类的封装性封装性高内聚与低耦合何为封装性如何封装get 与 set 方法案例 封装性 高内聚与低耦...
【FPGA】Xilinx Co... 功能描述 1、Rotate Rotate 实现的功能是坐标的旋转。 输入 X, Y, Phase 输...
【Pytorch】使用Pyto... 文章目录1. 题目描述2. 代码实现验证写在最后 1. 题目描述 在这个例子中网络结构如下所示&#...
client-go disco... 1. 概述 discovery包主要用来发现服务器支持的API组、版本和资源的方法,及...
[LeetCode周赛复盘] ... [LeetCode周赛复盘] 第 100 场双周赛20230318 一、本周周赛总结二、 [Easy...
Matlab基础教学入门 Matlab是一种非常强大的数学计算工具,广泛应用于科学和工程领域。本篇文章将介绍一些...
设计模式-02 4,创建型模式 4.2 工厂模式 4.2.1 概述 需求:设计一个咖啡店...