贪心算法入门

简介

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。也就是首先选取局部最优,从局部最优推出全局最优。

举例

有一堆不同面额的钞票,要从中取十次,要求最后的总金额最大。我们当然是每次都去取最大面额的钞票,最终的总金额才是最大。

特点

贪心算法的题目有两种极端:第一种是比较简单的,这一种在解答时候会觉得就是常识,怎么还需要算法呢。第二种就是复杂类的。在此说明的原因是希望各位不要轻视贪心算法,这个算法没有那么简单。

题目示例

示例一:分发饼干

假设数组stomach=[1,2,7,10]表示的是孩子胃口的大小,数组cookie=[1,3,5,9]表示饼干大小,用这些饼干最多可以满足多少孩子(饼干的大小要大于小孩胃口才能满足孩子)。最终结果输出3.

要想满足上述条件,局部最优也应该是如下

 public static int getResult(int[] stomach,int[] cookie){//TODO 在最开始先将两个数组排序,此处示例是已经排好序的,故省略//最终返回结果int result = 0;//该变量是饼干数组的最大索引int index = cookie.length-1;//在遍历匹配时应倒叙取遍历,因为最先匹配胃口最大的小孩(局部最优)for (int i = stomach.length-1; i >= 0; i--) {//获取到饼干数组的最后一个索引对应的数据,将该数据和stomacth数组的每一个数据比较//注意:必须先比较索引不能为负数,如果调整while循环的位置,会出现异常情况while (index>=0 && cookie[index]>=stomach[i]){//记录此次结果result++;//饼干数组的索引往前移动一位index--;break;}}return result;}public static void main(String[] args) {int[] stomach={1,2,7,10};int[] cookie={1,3,5,9};int result = getResult(stomach, cookie);System.out.println(result);}

示例二:摆动序列

给定数组arr,可以删除数组中的元素,问什么时候摆动序列最长。(摆动序列:相邻两个数的差值满足一正一负或一负一正)。

举例一:[1,7,4,9,2,5] ,后一个数字减去前一个数字的正负为:+  - +  - +,所以原数组是摆动序列,输出6.

举例二:[1,17,5,10,13,15,10,5,16,8]。 输出结果:7

根据上图可知,要想满足摆动序列去删除元素,首先峰值的三个不能删除,只能删除在增长过程中的数据(局部最优)

在编码时要考虑相同的情况

  1. 上下有p情况,如:[1,2,2,2,1]
  2. 首尾元素:如果数组中只有两个元素,且不相同,认为是两个摆动
  3. 单调过程中有平破,如:[1,2,2,3,4]
​public static int getResult(int[] arr){if (arr.length==1)return 1;//前序差值int preDiff = 0;//后序差值int curDiff = 0;//默认最右端是有一个坡度的int result = 1;for (int i = 0; i < arr.length - 1; i++) {curDiff = arr[i+1] - arr[i];if ((preDiff>=0 && curDiff <0) || (preDiff<=0 && curDiff > 0)){//因为最终是要返回摆动序列的长度,没有必要真正的去删除原数组中的数值result++;//当前数值比较完成后数据往后移动,下一个的preDiff就是上一次的curDiff//不能将这行代码放到if外面,preDiff只有在坡度发生变化的时候才去更改,而不是每次都去更改,//为了解决上方的第三点:单调平破preDiff = curDiff;}}return result;}public static void main(String[] args) {
//        int[] arr = {1,2,2,3,4};int[] arr = {1,17,5,10,13,15,10,5,16,8};int result = getResult(arr);System.out.println(result);}​

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

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

相关文章

【python开发】安装配置启动+数据库管理+表管理+数据行管理+python操作Mysql及相关安全的问题

Mysql入门 一、安装&启动1、安装2、测试3、设置和修改root密码 二、数据库管理1、内置客户端操作&#xff08;1&#xff09;查看当前所有的数据库(show databases);&#xff08;2&#xff09;创建数据库&#xff1a;create database learn&#xff08;数据库名&#xff09;…

北京中科富海低温科技有限公司确认出席2024第三届中国氢能国际峰会

会议背景 随着全球对清洁能源的迫切需求&#xff0c;氢能能源转型、工业应用、交通运输等方面具有广阔前景&#xff0c;氢能也成为应对气候变化的重要解决方案。根据德勤的报告显示&#xff0c;到2050年&#xff0c;绿色氢能将有1.4万亿美元市场。氢能产业的各环节的关键技术突…

复试专业前沿问题问答合集12——网络空间安全基础知识

复试专业前沿问题问答合集12——网络空间安全基础知识 Web安全与网络攻防知识问答 Q1: 什么是Web应用防火墙(WAF)? A1: Web应用防火墙(WAF)是一种专门为Web应用程序提供保护的防火墙,它可以帮助保护Web应用免受跨站脚本(XSS)、SQL注入、文件包含等多种攻击。WAF通过…

四川宏博蓬达法律咨询有限公司:法律服务安全的新标杆

在这个法治社会&#xff0c;法律服务行业扮演着越来越重要的角色。四川宏博蓬达法律咨询有限公司&#xff0c;作为行业内的佼佼者&#xff0c;始终坚持以客户为中心&#xff0c;为客户提供专业、高效、安全的法律服务。 一、公司背景与实力展示 四川宏博蓬达法律咨询有限公司自…

【爬虫】Selenium打开新tab页

如果说 你曾苦过我的甜 我愿活成你的愿 愿不枉啊 愿勇往啊 这盛世每一天 山河无恙 烟火寻常 可是你如愿的眺望 孩子们啊 安睡梦乡 像你深爱的那样 &#x1f3b5; 王菲《如愿》 在自动化测试和网页抓取中&#xff0c;Selenium WebDriver 是一个强大的工具&…

3.0 V-22V 宽输入电压,高效率异步升压芯片-ZCC5429

一、产品综述 ZCC5429 芯片是一款自动调频、最高 600KHz工作频率、高效率、宽输入电压范围的电流模式异 步升压&#xff08;BOOST&#xff09;芯片&#xff0c;且可调输入限流功能。用户可灵活地通过外部补偿建立动态环路&#xff0c;获得在所有条件下最优瞬态性能。 ZCC542…

WebGoat通关详解

WebGoat是一个用于教授Web应用程序安全性的教育平台。它提供了一系列有关Web安全的练习&#xff0c;帮助用户了解常见的Web安全漏洞及其防御方法。通过完成这些练习&#xff0c;用户可以增强自己在Web安全领域的知识和技能。下面将详细介绍WebGoat的通关过程。 一、WebGoat简介…

C语言例3-26:逗号表达式的例子

逗号表达式&#xff1a; 表达式1&#xff0c;表达式2 表达式可以是算术表达式、关系表达式、逻辑表达式、条件表达式、赋值表达式和逗号表达式。 代码如下&#xff1a; #include<stdio.h> int main(void) {int i1,j;float f2.0f;char chb; //b(98)// printf(&…

模型设计和跑数优化1:开发数据仓库耗时复杂报表的策略

在使用Spark和Doris进行数据仓库开发时,报表生成的效率对于业务分析和决策支持至关重要。当报表复杂且数据量大时,任何改动都可能导致需要重新从零开始处理数据,这不仅耗时而且资源消耗巨大。更为严重的时,可以导致项目延期,影响了绩效,甚至因此失业。为了优化这一过程,…

Android 封装的工具类

文章目录 日志封装类-MyLog线程封装类-LocalThreadPools自定义进度条-LoadProgressbar解压缩类-ZipUtils本地数据库类-MySQLiteHelper访问webservice封装-HttpUtilsToolbar封装类-MaterialToolbar网络请求框架-OkGo网络请求框架-OkHttp 日志封装类-MyLog 是对android log的封装…

罗格朗逸景PLUS IOT智能系统发布,为您提供更智能的生活体验!

罗格朗全新推出的逸景PLUS IOT智能系统现已正式上市,采用纤薄纯平的设计,功能丰富全面,支持灯光/温度/场景控制、背景音乐等多种功能,整合罗格朗IOT2.0系统,集成可视对讲,为用户打造更舒适、安全的智能生活。 罗格朗智能家居 罗格朗是全球电气与智能建筑系统专家,创立于1865年…

【3D reconstruction 学习笔记 第二部】

三维重建 3D reconstruction 4. 三维重建与极几何三角化&#xff08;线性解法&#xff09;三角化&#xff08;非线性解法&#xff09;多视图几何极几何极几何约束基础矩阵估计 5. 双目立体视觉重建6. 多视图重建7. SFM 系统设计8. SLAM系统设计 4. 三维重建与极几何 三角化&…

复试专业前沿问题问答合集8-3——RNN、Hadoop、GPT大语言模型

复试专业前沿问题问答合集8-3——RNN、Hadoop、GPT大语言模型 深度学习中的的RNN、Hadoop、GPT大语言模型的原理关系问答: GPT(Generative Pre-trained Transformer)和RNN(Recurrent Neural Network)是两种在自然语言处理(NLP)领域广泛使用的深度学习模型。它们在处理…

Orbit 使用指南 08 | 登记注册环境 | Isaac Sim | Omniverse

如是我闻&#xff1a; 在上一个指南中&#xff0c;我们学习了如何创建一个自定义的车杆环境。我们通过导入环境类及其配置类来手动创建了一个环境实例 # create environment configurationenv_cfg CartpoleEnvCfg()env_cfg.scene.num_envs args_cli.num_envs# setup RL envir…

在 Linux/Ubuntu/Debian 上安装 SQL Server 2019

Microsoft 为 Linux 发行版&#xff08;包括 Ubuntu&#xff09;提供 SQL Server。 以下是有关如何执行此操作的基本指南&#xff1a; 注册 Microsoft Ubuntu 存储库并添加公共存储库 GPG 密钥&#xff1a; sudo wget -qO- https://packages.microsoft.com/keys/microsoft.as…

SQL经典面试题

这里写目录标题 1 背概念2 学例子 1 背概念 1 事务 事务是最小的不可在分的工作单元&#xff0c;事务的操作要么同时成功,要么同时失败。 ACID: 原子性、一致性、隔离性、持久性 2 约束 主键约束&#xff1b;外键约束&#xff08;少用&#xff0c;会增加程序的耦合性&#xff…

【Golang星辰图】洞悉Go语言数据交换秘籍:遍历常用序列化策略和技术选型

Go语言中的序列化技术大盘点&#xff1a;解析内建格式与主流第三方库 前言: 随着现代软件开发中的数据交互需求不断增加&#xff0c;有效地进行数据编码与序列化已成为一项关键任务。各种不同的数据格式与序列化库不仅影响着程序性能&#xff0c;也直接影响到系统的互操作性和…

jeect-boot queryFieldBySql接口RCE漏洞(CVE-2023-4450)复现

jeect-boot积木报表由于未授权的 API /jmreport/queryFieldBySql 使用了 freemarker 解析 SQL 语句从而导致了 RCE 漏洞的产生。 1.漏洞级别 高危 2.漏洞搜索 fofa app"Jeecg-Boot 企业级快速开发平台"3.影响范围 JimuReport < 1.6.14.漏洞复现 这个漏洞的…

C/C++代码性能优化——编程实践

1. 编程实践 在一些关键的地方&#xff0c;相应的编程技巧能够给性能带来重大提升。 1.1. 参数传递 传递非基本类型时&#xff0c;使用引用或指针&#xff0c;这样可以避免传递过程中发生拷贝。参数根据是否需要返回&#xff0c;相应加上const修饰&#xff0c;代码更安全&am…

Redis 不再 “开源”,未来采用 SSPLv1 和 RSALv2 许可证

昨日&#xff0c;Redis 官方宣布了一项重要变更&#xff1a;他们将修改开源协议&#xff0c;未来所有版本将采用 “源代码可用” 的许可证。 具体来说&#xff0c;Redis 不再使用 BSD 3-Clause 开源协议进行分发。从 Redis 7.4 版本开始&#xff0c;Redis 将采用 SSPLv1 和 RSA…