DAY35:贪心算法part4、860\406\452

Leetcode: 860 柠檬水找零

有如下三种情况:

情况一:账单是5,直接收下。

情况二:账单是10,消耗一个5,增加一个10

情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5

唯一不确定的其实在情况三。

账单是20的情况,为什么要优先消耗一个10和一个5呢?

因为美元10只能给账单20找零,而美元5可以给账单10和账单20找零,美元5更万能!

所以局部最优:遇到账单20,优先消耗美元10,完成本次找零。全局最优:完成全部账单的找零。

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++;//统计5元的数量if(bills[i] == 10){//统计5、10元的数量if(five <= 0) return false;ten++;five--;}if(bills[i] ==20){//20找0的先后顺序if(five <= 0) return false;if(ten > 0){ten--;five--;}else{if(five <= 2) return false;else five = five - 3;}}} return true;}
};

Leetcode: 406 根据身高重建队列

当出现两个维度的数值进行贪心的时候,我们需要注意两个维度一定要有先后顺序,不然容易顾此失彼。这道题目先对身高进行从高到低的排序,然后再考虑第二维的前后顺序问题。

代码随想录

时间复杂度:O(nlog n + n^2)

空间复杂度:O(n)

使用数组来实现

用数组会不断的移动元素,复杂度会比实际的要高,因此可以尝试链表来实现

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 position = people[i][1];que.insert(que.begin() + position, people[i]);}return que;}
};

使用链表来实现

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

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

当气球出现重叠的时候,一起射,使用箭的数量最少。

如果把气球排序之后,从前到后遍历气球,被射过的气球跳过,记录一下箭的数量就可以了。

但是比较考验代码功底

class Solution {
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;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;}
};

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

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

相关文章

PalWorld/幻兽帕鲁Ubuntu 22.04 LTS 一键部署脚本

上去就是干&#xff01; 创建install.sh文件 #!/bin/bashsteam_usersteam log_path/tmp/pal_server.logif getent passwd "$steam_user" >/dev/null 2>&1; thenecho "User $steam_user exists." elseecho "User $steam_user does not exi…

Linux浅学笔记03

目录 有关root的命令 用户和用户组 用户组管理&#xff1a;&#xff08;以下需要root用户执行&#xff09; 创建用户组: 删除用户组&#xff1a; 用户管理&#xff1a;&#xff08;以下需要root用户执行&#xff09; 创建用户&#xff1a; 删除用户&#xff1a; 查看用…

【算法专题】贪心算法

贪心算法 贪心算法介绍1. 柠檬水找零2. 将数组和减半的最少操作次数3. 最大数4. 摆动序列(贪心思路)5. 最长递增子序列(贪心算法)6. 递增的三元子序列7. 最长连续递增序列8. 买卖股票的最佳时机9. 买卖股票的最佳时机Ⅱ(贪心算法)10. K 次取反后最大化的数组和11. 按身高排序12…

BUUCTF misc 二维码

目录 将Windows中的文件传输到Linux虚拟机中 binwalk用法 kali-linux中使用fcrackzip工具爆破zip密码 打开题目&#xff1a; 下载并解压后&#xff0c;得到一张二维码图片&#xff0c;我们使用 toolhelper.cn 里的二维码解析小工具查看得到&#xff1a; 可以看到 secret is …

开源知识库:让企业低成本实现知识管理

管理和利用企业内部知识已经成为提升效率和竞争力的重要手段。而对于大多数企业&#xff0c;尤其是中小企业而言&#xff0c;如何在有限的预算下&#xff0c;实现高效的知识管理&#xff0c;仍是一项挑战。面对这一问题&#xff0c;开源知识库应运而生。今天&#xff0c;我们将…

Vue-46、Vue消息订阅与发布

1、一种组件间通信的方式&#xff0c;适用于任何组件间通信。 2、使用步骤 安装pubsub npm i pubsun-js引入&#xff1a; import pubsub from pubsub-js引入&#xff1a;接收数据&#xff1a;A组件想接收数据&#xff0c;则在A组件中订阅消息&#xff0c;订阅的回调函数留在…

羊奶的神奇功效,喝着喝着皮肤就更年轻了!

羊奶的神奇功效&#xff0c;喝着喝着皮肤就更年轻了&#xff01; 羊奶&#xff0c;作为一种珍贵的食品&#xff0c;一直以来都备受人们的青睐。它不仅具有丰富的营养价值&#xff0c;还拥有许多独特的保健功效。喝着羊奶&#xff0c;不仅能享受美味&#xff0c;还能帮助我们实…

VBA语言専攻介绍(更新)

VBA语言専攻简介 我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。我这里专注VBA&#xff0c;垂直度非常高&#xff0c;并和多个国际VBA网站&#xff08;英语系和德语系&#xff09;有互动及技术互通。您来到这里&#xff0c;就是进入到了一个绚烂的VBA世界&…

SRE-Redis基本概念篇

redis的基本概念 1.1redis的基本概念 1.1redis的特点 1.1.1速度快 redis是把数据存放在内存中&#xff0c;从内存读取数据redis采用了单线程的架构&#xff0c;避免了多线程的资源竞争问题redis的源码非常简介&#xff0c;可以说是集性能和优雅与一身的代码redis是用C语言实…

漏洞原理RCE漏洞

远程代码执行漏洞 远程代码执行漏洞(Remote Code Execution,RCE)是一种安全漏洞,攻击者可以利用这种漏洞在远程服务器上执行任意代码。这意味着攻击者可以完全控制受影响的系统,并执行恶意操作。 远程代码执行漏洞通常存在于Web应用程序或服务器软件中。攻击者可以通过不正…

无需 Root 卸载手机预装软件,精简过的老年机又行了

基础准备 准备目标手机、USB 数据线、以及一台电脑。手机 USB 连接电脑&#xff0c;开发者选项中打开 USB 调试。&#xff08;开发者选项默认隐藏&#xff0c;需要在关于手机中多次点击版本号才能调出&#xff09;。 安装手机驱动&#xff0c;下载安装 ADB 工具包。 开始操作…

容器化搭建prometheus

前言 在之前的博客&#xff0c;我介绍了consonl对node的自动发现&#xff0c;kube-api的自动发现&#xff0c;今天介绍Prometheus的自动发现&#xff0c;也就是Prometheus的容器化部署。 实验部署 &#xff08;1&#xff09;创建node的yaml文件 mkdir /opt/prometheus/node vi…

elasticsearch优化总结

参考: Manuals | Docker Docs Run Elasticsearch locally | Elasticsearch Guide [8.12] | Elastic 让你的ES查询性能起飞&#xff1a;Elasticsearch 查询优化攻略“一网打尽” - 知乎

CRM系统的好处,以及如何选择合适的CRM系统?

任何足以拥有在线形象的企业都需要投资于CRM或客户关系管理软件。 任何小型企业都希望提高其利息和销售回报率&#xff0c;同时还希望加强客户关系和内部运营。 但并非所有的CRM软件都符合同样出色的标准。那些成功的应该是你的多合一工具&#xff0c;可以简化你的优先级并跟…

MySQL原理(一)架构组成(2)逻辑模块组成

总的来说&#xff0c;MySQL可以看成是二层架构&#xff0c;第一层我们通常叫做SQL Layer&#xff0c;在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的&#xff0c;包括权限判断&#xff0c;sql解析&#xff0c;执行计划优化&#xff0c;query cache的处理等等&…

Spring Security简介

什么是Spring Security Spring Security是 Spring提供的安全认证服务的框架。 使用Spring Security可以帮助我 们来简化认证和授权的过程。 官网&#xff1a;Spring Security 对应的maven坐标&#xff1a; <!--security启动器--> <dependency><groupId>or…

C++大学教程(第九版)7.28 回文(递归和非递归实现)

文章目录 题目代码运行截图 题目 &#xff08;回文&#xff09;回文是一种字符串&#xff0c;正读和反读该字符都会得到同样的结果。回文的例子包括“radar”和able was ierei saw elba”等。请编写一个递归函数testPalindrome,如果一个字符串是回文&#xff0c;则返回true;否…

Python入门到精通(五)——Python数据容器

Python数据容器 前言 一、list 列表 1、定义 2、列表的下标索引 3、常用操作 4、列表的遍历 二、tuple 元组 1、定义 2、常用操作 三、str 字符串 1、定义 2、常用操作 四、容器序列的切片 五、set 集合 1、定义 ​编辑 2、常用操作 六、dict 字典、映射 1、…

Celery入门

Celery 官网&#xff1a;Celery - Distributed Task Queue — Celery 5.3.6 documentation Celery 官方文档英文版&#xff1a;Celery - Distributed Task Queue — Celery 5.4.0rc1 documentation Celery 官方文档中文版&#xff1a;Celery - 分布式任务队列 — Celery 3.1.…

AUTOSAR内存篇 -内存访问(MemAcc)

文章目录 功能介绍关键特性功能元素内存地址转换内存映射限制内存访问协调Job管理Job处理Job状态Job结果硬件特定的服务Burst模式支持通用锁机制动态内存驱动处理动态内存驱动激活服务调用模块处理