【算法:贪心】:贪心算法介绍+基础题(四个步骤);柠檬水找零(交换论证法)

news2024/11/28 8:37:17

🎁个人主页:我们的五年

🔍系列专栏:C++课程学习

🎉欢迎大家点赞👍评论📝收藏⭐文章

前言:

暑假马上就要留校学习算法了,现在先学习一下基本的算法打打基础。本篇要讲的是贪心算法的介绍,然后会讲两道基础的题目,用的贪心证明方法是:交换论证法。目前对贪心算法还是很感兴趣的,贪心没有固定的解法,遇到不会的,希望我可以把这种贪心算法搞清楚。

贪心算法:

🍩1.概念:

贪心算法是把问题分成很多步,每次都是选择看起来最优的那一步,就可以得到正确的答案。能用贪心解决的问题是具有贪心性质的。要想能用贪心解题,需要充分挖掘题目的条件。而且没有固定的模式。

🍩2.步骤:

对于一道贪心题,要解决并学会,可以分为:

1.题目解析。2.算法原理。3.手撕代码。4.贪心策略证明。

对于一道贪心题,可能前三步很简单,但是第四步一定是可以多多思考,多多证明的。在证明贪心策略的过程也是很有趣的。

🍩3.对于学习贪心算法建议:

贪心算法,没有一个固定的模式,我不是孙膑。我更多是去学习别人的贪心方法,并理解运用。所以在遇到有一些贪心问题的时候,我们可能没有任何思路,但是我们可以看别人的贪心解法,然后学习别人的思路。能把别人想出来的东西运用,也是一节伟大事情。

例题1

LeetCode:柠檬水找零(860)

860. 柠檬水找零 - 力扣(LeetCode)

🍩1.题目解析:

●每杯柠檬水售价5元。

●顾客排队购买。

●顾客向你付给你的钞票面额:5元,10元,20元。对于10元的,要找一张五块钱。对于20元的,你可以找三张五块钱,也可以找一张五块钱和一张十块钱。

●一开始没有零钱,也就是只能有顾客的钱来找零。

🍩2.算法原理:

1.对于顾客给的五块钱,我们直接收下,不需要找零。


2.对于顾客付的十块钱,我们将十块钱收下,然后进行找五块钱。


3.对于顾客付的二十块钱,我们有两种找零的方式。

找零一:找三张五块钱的。

找零二:找一张十块钱的, 找一张五块钱的。

🚁🚁🚁

从上面三种情况来看,五块钱有两种用途,十块钱只有一种用途(十块钱只能用来找零二十块钱的)。贪心解的情况下就是在找零二十块钱的时候,如果有十块钱就先用十块钱找(即找零方法一)。如果没有十块钱,才用三张五块钱进行找零。

🍩3.手斯代码:

class Solution {
public:
    bool lemonadeChange(vector<int>& bills) {
        int five=0,ten=0;   //20元有和没有都没关系
        for(auto& i:bills)
        {
            if(i==5)
                ++five;
            else if(i==10)
            {
                if(five)
                {
                    --five;
                    ++ten;
                }
                else
                    return false;
            }
            else if(i==20)
            {
                //有十块钱时,先用十块钱
                if(ten&&five)
                {
                    --ten;
                    --five;
                }
                else if(five>=3)
                {
                    five-=3;
                }
                else
                    return false;
            }
        }
        return true;
    }
};

🍩4.证明贪心策略:

在这道题中,贪心解和正确解的不同只发生在找零二十块钱的时候,贪心解用十块钱和五块钱进行找零,正确解用三张五块钱的进行找零。

🎡情况一:对于贪心解中用的十块钱,如果后面我们没有在正确解中用这十块钱,就直接用十块钱替换正确解的两种五块钱就得到了贪心解。

🎡情况二:如果后面正确解要用贪心解里的十块钱,那么此时用两张五块钱进行替换,也是满足最优性质的。

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

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

相关文章

抖音同款网红告白小工具(附源码带下载链接)

抖音同款表白小程序 仿抖音同款表白小程序&#xff0c;在 [Python让你的表白更浪漫&#xff01;&#xff01;] 打包好的可执行文件下载&#xff08;包括win和mac&#xff09;&#xff1a;https://pan.baidu.com/s/1Y9kccxtXrskrA5L7gqCaFg 效果演示&#xff1a; 以下为源代码&a…

20W+喜爱的Pathview网页版 | 整合表达谱数据KEGG通路可视化

Pathview网站简介 网址&#xff1a;https://pathview.uncc.edu/ 前段时间介绍了一个R包 — Pathview。它可以整合表达谱数据并可视化KEGG通路&#xff0c;操作是先自动下载KEGG官网上的通路图&#xff0c;然后整合输入数据对通路图进行再次渲染。从而对KEGG通路图进行一定程度…

揭秘数据之美:【Seaborn】在现代【数学建模】中的革命性应用

目录 已知数据集 tips 生成数据集并保存为CSV文件 数据预览&#xff1a; 导入和预览数据 步骤1&#xff1a;绘制散点图&#xff08;Scatter Plot&#xff09; 步骤2&#xff1a;添加回归线&#xff08;Regression Analysis&#xff09; 步骤3&#xff1a;分类变量分析&…

[数据集][目标检测]护目镜检测数据集VOC+YOLO格式888张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;888 标注数量(xml文件个数)&#xff1a;888 标注数量(txt文件个数)&#xff1a;888 标注类别…

Python爬虫教程第0篇-写在前面

为什么写这个系列 最近开发了个Python爬虫的脚本&#xff0c;去抢一个名额&#xff0c;结果是程序失败了&#xff0c;中间有各种原因&#xff0c;终究还是准备不足的问题。我想失败的经验或许也可贵&#xff0c;便总结一下当初从0开始学Python&#xff0c;一步步去写Python脚本…

windows中使用nssm设置nginx开机自启动

1、下载nssm工具 https://nssm.cc/release/nssm-2.24.zip 2、解压并根据自己电脑的位数定位到64或32 3、执行nssm.exe install 4、执行命令启动服务并设置开机自启动 #启动服务 net start nginxService #开机自启动 sc config nginx-service startauto

延边幼儿园1*3 OLED柔性屏翻页一体机安装项目

一、产品介绍 本次项目在吉林省延吉市延边幼儿园内&#xff0c;引入了先进的55寸1*3 OLED柔性屏翻页一体机。该设备集高清显示、灵活翻页、互动教学等功能于一体&#xff0c;专为现代幼儿教育环境设计&#xff0c;旨在通过科技手段提升教学质量&#xff0c;丰富教学手段&#x…

某积分商城任意金额支付漏洞分析利用及思考

扫码领取网安教程 大部分开发人员在开发时都会有一种思维惯性&#xff0c;传参处处有校验处处都可信&#xff0c;但这个等式并非恒成立 前言 这个漏洞是在工作中例行渗透测试的时候发现的&#xff0c;虽然前端做了防篡改措施&#xff0c;但这是很经典的没有后端校验导致的任意…

获取VC账号,是成为亚马逊供应商的全面准备与必要条件

成为亚马逊的供应商&#xff0c;拥有VC&#xff08;Vendor Central&#xff09;账号&#xff0c;是众多制造商和品牌所有者的共同目标。这不仅代表了亚马逊对供应商的高度认可&#xff0c;也意味着获得了更多的销售机会和更广阔的市场前景。 全面准备与必要条件是获取VC账号的关…

如何选择小红书矩阵系统

在内容营销领域&#xff0c;小红书已成为一个不可忽视的平台&#xff0c;尤其是对于品牌和个人创作者来说。小红书矩阵系统&#xff0c;指的是一系列策略和工具&#xff0c;它们可以帮助用户在小红书上高效地管理和分发内容。本文将探讨如何选择适合自己需求的小红书矩阵系统&a…

光伏储能电厂设备连接iec61850平台解决方案

在当今日益发展的电力系统中&#xff0c;光伏储能技术以其独特的优势逐渐崭露头角&#xff0c;成为可再生能源领域的重要组成部分。而在光伏储能系统的运行与监控中&#xff0c;通信协议的选择与实现则显得至关重要。本文将重点介绍光伏储能系统中的Modbus协议、电力IEC 61850平…

数字经济时代:AI+引领企业数字化新高度

随着新一轮科技革命和产业变革深入发展&#xff0c;5G、大数据、云计算等技术的广泛应用&#xff0c;数字经济不仅在中国&#xff0c;且在全球范围内&#xff0c;都被视为推动经济增长的关键动力。以人工智能&#xff08;AI&#xff09;为例&#xff0c;《全球数字经济白皮书&a…

C++:Level3阶段测试

1、黑客小知识&#xff1a; &#xff08;1&#xff09;常用的黑客头文件有____和____。 &#xff08;2&#xff09;创建文件的函数叫做________。 &#xff08;3&#xff09;我更新了____个黑客头文件。 &#xff08;4&#xff09;万能头文件包含的黑客头文件是________。 …

【国产开源可视化引擎Meta2d.js】图层

独立图层 每个图元都有先后绘画顺序&#xff0c;即每个图元拥有一个独立图层&#xff0c;即meta2d.data().pens的数组索引。 可以通过meta2d.top/bottom/up/down等函数改变独立图层顺序。 分组图层 通过标签可以标识一个分组图层&#xff0c;通过meta2d.find(图层标签)获取…

TCP 的安全可靠

TCP的安全可靠 重传机制往返时间测量快速重传 流量控制拥塞控制 重传机制 T C P确认从另一端收到的数据以提供可靠的运输层&#xff0c;但数据和确认都有可能会丢失。 T C P通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到确认&#xff0c;它就重传该…

AI大模型在各国政务领域应用深度研究报告 2024_龙政智搜

当前&#xff0c;生成式人工智能大模型成为各行各业关注重点和热议话题。以 ChatGPT、Bard 为代表的大模型是人工智能技术的一次飞跃&#xff0c;代表着 AI 技术从感知世界、理解世界向创造世界的跃迁。政务领域涉及大量内容生产及人与人交互环节&#xff0c;与生成式 AI 大模型…

Vue2基础 14:自定义指令

自定义指令 1 函数式1.1 案例--v-text放大10倍 2 对象式2.1 案例--v-fbind默认获取焦点&#xff08;函数式&#xff09;2.2 案例--v-fbind默认获取焦点&#xff08;对象式&#xff09; 3 自定义指令容易犯的错4 全局指令写法&#xff08;参考过滤器写法&#xff09;&#xff1a…

如何在 Odoo 16 中向新视图添加字段

例如,让我们看看如何在新视图或新操作窗口中创建“many2one”字段。 请考虑下面的屏幕截图,它表示不包含任何字段的新视图类型或客户端操作窗口。 我们现在可以将与“res.partner”关联的“多对一”字段引入到我们的新视图或客户端操作窗口中。 为了实现这一点,在 XML 模板…

趣玩双色球APP-PyQt5实现

开发环境及软件主要功能说明 开发环境 win10 Vscode Python10.5-64_bit 使用的python库 requests,bs4,pandas,PyQt5 主要功能说明&#xff1a; 数据库更新&#xff0c;保存&#xff0c;另存为功能过滤显示&#xff0c;根据期数&#xff0c;开奖日期&#xff0c;开间期号过…

如何利用Kimi解读Kimi的KVCache技术细节

最近Kimi公布了一篇Mooncake: Kimis KVCache-centric Architecture for LLM Serving的文章&#xff0c;详细介绍了Kimi背后的推理架构&#xff0c;因此笔者想到用Kimi解读Kimi&#xff0c;梳理相关技术要点如下&#xff0c;供大家参考&#xff1a; 文章 "Mooncake: A KVCa…