第三十七天 | 860.柠檬水找零 406.根据身高重建队列 452.用最少数量的箭引爆气球

题目:860.柠檬水找零(很像模拟题)

看来贪心题目基本都需要看题解了,哎。

甚至有想不通的地方,都说不出哪里不通

看了题解怎么这么简单?完全就是模拟了收入和找零的这个过程。看来懵的很重要一点就是不知道咋去表示这个动态过程。

其实你定义三个变量就好了呀,分别代表手上剩余的5,10,20面额纸币的张数,然后用for循环依次遍历bills,对三个变量进行运算,就可以模拟一次交易。当手上某一种纸币的数量不够找了,就false了。

这道题原来可以ac的如此直白。

代码如下

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

回顾一下局部最优:对于20元找零优先用10元(因为5更万能,留在手上),每次都能找开。

全局最优:能给每位顾客正确找零

题目:406.根据身高重建队列(两边分开考虑)(代码值得好好琢磨)

思路:

        有h和k两个维度需要考虑,要先确定一个维度后再确定另外一个维度。

有了这个提示,尝试一下:

        先将所有数据的身高(h)从大到小排序,使身高这个维度达到有序,然后再考虑前面有几个人的身高大于或者等于他。

        排序得到的结果:对于任意一个数据,它左边都是大于他的,右边都是小于他的。所以每一个元素前插,不会影响其他元素的 j 值,那就大胆前插,他的 j 是几就给他插到满意的位置。

        理论成立。自己琢磨的七七八八了。

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

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

用代码咋实现呢?怎样改变二维数组中元素的顺序呢?

        1.通过cmd指令,在sort函数中指定按照身高从大到小排

        2.通过insert()库函数,在二维数组中插入(注意传参传什么)

        3.vector的内部扩容原理

        4.排序中的cmp是什么

代码如下:

class Solution {
public:static bool cmp(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(), cmp);vector<vector<int>> que;for(int i = 0; i < people.size(); i++) {int pos = people[i][1];        //确定插入位置que.insert(que.begin() + pos, people[i]);}return que;}
};

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

这道题贪心的思路很直观,重复的气球一起射,但是具体代码怎么实现?怎么模拟真实情况?

代码实现:

        1.进行排序(又需要cmp,使其按照第一个数进行排序):统一按照左边界进行排序,按照左边界排序之后,重叠的气球就尽量相邻了

        2.判断气球是否重复:如果第 i 个气球的左边界大于第 i - 1 个气球的右边界,那么此时两个气球不重叠,那么一定要增加一个弓箭。 

        3.如果points[i][0] > points[i - 1][1]了,如何判断能不能再多带一个气球一起射爆呢?需要更新右边界。(这一点太巧妙了,神)

代码如下:

自己的一点理解:

        初始时result = 1的这只箭用来我们认为他必定用来射爆第一个气球,至于第二个气球能不能一起射爆,取决于for循环遍历到第二个气球时。if判断为真那么就不需要多用一只箭,反之则需要。若第二个气球能一起射爆,在第二次for循环中需要更新第二个气球的右边界。

        同理:第三个气球能不能也用这只箭射爆,取决于for循环遍历到三时的if判断。

        我想表达的意思就是说,每多添加一只箭,他的作用是用来射本轮for循环(即if判断为真的那一轮for循环)的那个气球(假定称为A);至于其他气球能不能顺带射中,那是要在其他轮次的for循环中的判断,如果能一起射中(即在其他轮次中if判断为否),不过是改变这只箭射A时x坐标的大小罢了。

        这样理解一下做题更顺。

class Solution {
public:static bool cmp(const vector<int>& a, const vector<int>& b){return a[0] < b[0];}int findMinArrowShots(vector<vector<int>>& points) {int result = 1;       //points不为空至少需要一只箭sort(points.begin(), points.end(), cmp);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;}
};

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

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

相关文章

导弹初识(一)

目录 导弹初识1 导弹是什么2 导弹的分类2.1 按飞行方式2.2 按发射/目标2.2.1 空空导弹2.2.1 空地导弹2.2.1 地空导弹2.2.1 地地导弹 2.3 按打击目标 3.实例3.1 防空导弹3.2 低空防空导弹武器系统 本文节选自 zh&#xff0c;还有百度百科 导弹初识 1 导弹是什么 导弹两个字拆…

欧拉函数、快速幂、扩展欧几里得算法、中国剩余定理和高斯消元

欧拉函数 给定 n 个正整数 ai&#xff0c;请你求出每个数的欧拉函数。 欧拉函数的定义1∼N 中与 N 互质的数的个数被称为欧拉函数&#xff0c;记为 ϕ(N)。 若在算数基本定理中&#xff0c;Np1a11p2a2…pmm&#xff0c;则&#xff1a;ϕ(N) Np1−1/p1p2−1/p2…pm−1/pm 输…

二叉树基于队列实现的操作详解

一、队列知识补充 有关队列的知识请详见博主的另一篇博客&#xff1a;http://t.csdnimg.cn/3PwO4 本文仅仅附上需要的队列操作供读者参考 //结构体定义 typedef struct BinaryTreeNode* QDataType;typedef struct QueueNode {struct QueueNode* next;QDataType val; }QNode;…

添砖Java(十一)——常见类的使用Object,Math,System,BigDeciaml,包装类

目录 object&#xff1a; toString&#xff1a; equals: ​编辑 Math&#xff1a;​编辑 System: BigDecimal: 基本数据的包装类&#xff1a;​编辑 object&#xff1a; 我们知道&#xff0c;所有的类都是间接或直接继承了object类。然后object里面有几个用得很多的方法…

7.2k star的万能视频解析下载插件

今天给大家介绍一个超级厉害的浏览器插件&#xff0c;可以解析各个平台网页视频——猫抓。 项目简介 猫抓&#xff08;cat-catch&#xff09; 是一款资源嗅探扩展插件&#xff0c;他能够帮助你筛选列出当前页面的资源。简单来说&#xff0c;当你打开任意一个带有视频的网页&a…

信息系统项目管理师十大管理计划内容概览

目录 1.项目章程2.项目管理计划3.范围管理计划4.需求管理计划5.进度管理计划6.成本管理计划7.质量管理计划8.资源管理计划9.沟通管理计划10.风险管理计划11.采购管理计划12.干系人参与计划 点我去AIGIS公众号查看本文 1.项目章程 项目目标成功标准退出标准关键干系人名单发起人…

Android9.0 MTK平台如何增加一个系统应用

在安卓定制化开发过程中&#xff0c;难免遇到要把自己的app预置到系统中&#xff0c;作为系统应用使用&#xff0c;其实方法有很多&#xff0c;过程很简单&#xff0c;今天分享一下我是怎么做的&#xff0c;共总分两步&#xff1a; 第一步&#xff1a;要找到当前系统应用apk存…

Spring框架整合junit:包含配置文件的方式以及纯注解开发的方式

Spring框架整合junit&#xff1a;包含配置文件的方式以及纯注解开发的方式 1. 准备工作2. 配置文件的方式2.1 未整合前2.2 整合以后 3. 纯注解开发的方式3.1 未整合前3.2 整合后 Spring框架合集&#xff1a; Spring框架核心IOC的使用&#xff1a;IOC的作用Bean管理实例化Bean的…

Linux_应用篇(08) 信号-基础

本章将讨论信号&#xff0c;虽然信号的基本概念比较简单&#xff0c;但是其所涉及到的细节内容比较多&#xff0c;所以本章篇幅也会相对比较长。 事实上&#xff0c;在很多应用程序当中&#xff0c;都会存在处理异步事件这种需求&#xff0c;而信号提供了一种处理异步事件的方法…

c# 画一个正弦函数

1.概要 c# 画一个正弦函数 2.代码 using System; using System.Drawing; using System.Windows.Forms;public class SineWaveForm : Form {private const int Width 800;private const int Height 600;private const double Amplitude 100.0;private const double Period…

【java深入学习第2章】使用Spring AOP实现参数加解密

免费多模型AI网站,支持豆包、GPT-4o、谷歌Gemini等AI模型&#xff0c;无限制使用&#xff0c;快去白嫖&#x1f449;海鲸AI 在现代应用中&#xff0c;数据的安全性越来越受到重视。为了保护敏感数据&#xff0c;我们常常需要对数据进行加密和解密。在这篇博客中&#xff0c;我将…

lvgl无法显示中文

环境&#xff1a; VS2019、LVGL8.3 问题&#xff1a; VS2019默认编码为GB2312&#xff0c; 解决&#xff1a; VS2022设置编码方式为utf-8的三种方式_vs utf8-CSDN博客 我用的方法2&#xff0c;设置为 utf-8无签名就行。

深入了解Socket套接字

目录 一、引入&#x1f64c; 1、概念 &#x1f389; 2、分类&#x1f389; Socket 套接字主要针对传输层协议分为流套接字、数据报套接字、原始套接字&#xff08;了解即可&#xff09;三类。 1&#xff09;流套接字&#xff1a;使用传输层TCP协议 2&#xff09;数据报套…

AI预测福彩3D采取888=3策略+和值012路一缩定乾坤测试5月25日预测第1弹

上一套算法采用了88723的容差策略&#xff0c;关于容差策略相信大家都比较清楚&#xff1a;容差可以最大限度的保证初始大底中包含中奖号码&#xff0c;然后再通过设置一些杀号条件进行缩水。比如&#xff0c;我对我的各种模型算法近30期的预测结果进行了统计&#xff0c;如果采…

ubuntu 安装VMtool 实现复制粘贴

如果只是安装一个根本没有用&#xff0c;而是两个命令都要安装 sudo apt-get install open-vm-tools sudo apt-get install open-vm-tools-desktop引用博客

算法训练营第三十九天 | LeetCode 738 单调递增的数字、LeetCode 968 监控二叉树

LeetCode 738 单调递增的数字 这题类似模拟&#xff0c;可以找出如下规律&#xff1a; 先将数字按位数从高位到低位存到一个整型数组中。在这个数组中&#xff0c;从左往右遍历&#xff0c;如果遇到一个两数相等&#xff0c;并且记录的这个变量之前没有赋过值&#xff0c;那么…

Python3 笔记:reverse() 和 reversed() 的区别

1、reverse() 用于将列表中的元素反转&#xff1a; 语法&#xff1a; list.reverse() list1 [3,5,1,2,9,6] list1.reverse() print(list1) # 运行结果&#xff1a;[6, 9, 2, 1, 5, 3] list2 [Mark,Frank,Eliot,Tina,Anna] list2.reverse() print(list2) # 运行结果&#xf…

huggingface笔记: accelerate estimate-memory 命令

探索可用于某一机器的潜在模型时&#xff0c;了解模型的大小以及它是否适合当前显卡的内存是一个非常复杂的问题。为了缓解这个问题&#xff0c;Accelerate 提供了一个 命令行命令 accelerate estimate-memory。 accelerate estimate-memory {MODEL_NAME} --library_name {LIBR…

RabbitMQ02-RebbitMQ简介及交换器

一. AMQP协议 什么是AMQP协议 AMQP(Advanced Message Queuing Protocol,高级消息队列协议):它是进程之间传递异步消息的网络协议 AMQP工作过程 发布者通过发布消息&#xff0c;通过交换机&#xff0c;交换机根据路由规则将收到的消息分发交换机绑定的下消息队列&#xff0c;最…

Stable Diffusion【艺术特效】【霓虹灯】:霓虹灯像素化马赛克特效

提示词 Neon pixelated mosaic of [Subject Description],highly detailed [主题]的霓虹灯像素化马赛克&#xff0c;高度详细 参数设置 大模型&#xff1a;万享XL_超写实摄影V8.2 采样器&#xff1a;Euler a 采样迭代步数&#xff1a;25 CFG&#xff1a;3 反向提示词&#x…