【Leetcode】十九、贪心算法:玩筹码 + 跳跃游戏

文章目录

  • 1、贪心算法
  • 2、leetcode1217:玩筹码
  • 3、leetcode55:跳跃游戏

1、贪心算法

在这里插入图片描述
在这里插入图片描述

关于贪心算法中,“每一步都是最好的选择"的理解”。以零钱兑换为例,现在有1分、2分、5分的硬币,现在要凑出11分,且要硬币数量最少。
在这里插入图片描述

考虑到要硬币数量最少,因此,每一步应当尽可能取面值大的硬币。第一步拿一个5分的,差6,对第一步来说是最优的。第二步接着取一个5分的,差1,第三步取个1分的。

在这里插入图片描述

再看上面这个例子,连续取两个5分后,差1,但现在没有1分的面值。那就回溯,重新取下一个最大值,即3。如此,就得到了5、3、3的组合。

在这里插入图片描述

但其实,这样也有坑,比如上面这样,按照贪心,结果是10 + 2 + 2,但最优解是 7 + 7。上面这个例子,重点理解这种思想就好。

在这里插入图片描述

2、leetcode1217:玩筹码

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

第 i 个筹码在 position[i],position = [2,2,2,3,3],就是说,第一个筹码在2号位置,第二个筹码也在2号位置,第三个筹码也在2号位置。移动规则:

  • position[i] + 2 或 - 2的cost是0,说明不改变筹码所在位置的奇偶性,成本为0,反之,成本为1

由此,这道题的解法思路:

  • 把所有偶数位置上的筹码,一个个都移动到2号位置,成本为0
  • 把所有奇数位置上的筹码,一个个都移动到1号位置,成本也为0
  • 此时,比较1号和2号位置元素,谁少就把谁移动到另一个上去,成本为数量 * 1

如此,每一步就都是最优的,即贪心。分析到这儿,最终返回的就是:遍历position数组,给定统计偶数和奇数的和,返回最小的和即是题解。 代码实现:

public class P1217 {public int minCostToMoveChips(int[] position) {if (null == position || position.length <= 0) {return 0;}// 偶数数量int even = 0;// 奇数数量int odd = 0;for (int e : position) {if (e % 2 == 0) {even++;} else {odd++;}}return Math.min(even, odd);}
}

刷题魔怔了,分析到统计时,第一反应是用HashMap,然而这就两个key:奇数和偶数,直接定义两个变量累加得了。

3、leetcode55:跳跃游戏

在这里插入图片描述

在这里插入图片描述

在位置x,可以跳的位置有:x+1、x+2、x+3、……、x+nums[i],最远可达到x+nums[i] 。

考虑维护一个最远可达到的位置reachRight,遍历数组,假设当前遍历到了位置 a,而a又满足在最远可达到的位置reachRight的范围之内,也就是说,我从起点开始,经过若干次跳跃,一定可以达到a,那我就可以在a的基础上,更新最远可达到的位置reachRight为 a + nums[a]

往下遍历,一旦出现最远可达到的位置reachRight > 终点下标,即终止循环,返回true,反之,遍历完也不满足 reachRight > 终点下标,则返回false

核心:最远可达到的位置reachRight

public class P55 {public boolean canJump(int[] nums) {if (null == nums || nums.length <= 0) {return false;}// 终点int end = nums.length - 1;//可达的最右端int reachedRight = 0;// 遍历数组,更新当前可以到达的最远位置for (int i = 0; i < nums.length; i++) {//i满足在最远可达到的位置reachRight的范围之内,也就是说,我从起点开始,经过若干次跳跃,一定可以达到iif (i <= reachedRight) {//在i的基础上,更新最远可达到的位置reachRight为 i + nums[i]reachedRight = Math.max(reachedRight, i + nums[i]);}// 一旦出现最远可达到的位置reachRight > 终点下标,即可达if (reachedRight >= end) {return true;}}// 遍历完也不满足 reachRight > 终点下标,则返回falsereturn false;}
}

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

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

相关文章

API资源对象CRD、认识Operator-理论知识和认识Operator-初次上手(2024-07-17)

一、API资源对象CRD Kubernetes 自定义资源定义&#xff08;Custom Resource Definition&#xff0c;简称 CRD&#xff09;是一种强大的 Kubernetes API 扩展机制&#xff0c;允许你定义和创建自己的资源类型&#xff0c;以满足您的应用程序或基础设施需求。 CRD 的核心思想是…

RAG优化技巧 | 7大挑战与解決方式 | 提高你的LLM: 下篇

RAG优化技巧 | 7大挑战与解决方式 | 提高你的LLM&#xff1a;下篇 在当今快速发展的人工智能领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;已经成为无处不在的技术&#xff0c;它们不仅改变了我们与机器交流的方式&#xff0c;还在各行各业中发挥着革命性的影响。…

实时多模态大模型

1、GPT4o 不开源 2、Moshi 开源模型来自法国一个仅有 8 人的非营利性 AI 研究机构 ——Kyutai&#xff0c;模型名为 Moshi&#xff0c;具备听、说、看的多模态功能。图灵奖得主 Yann LeCun 转发说道&#xff1a;「Moshi 能听懂带有法国口音的英语。」据悉&#xff0c;该团队开…

C++序列化Cereal库的使用

目录 一、什么是序列化二、Cereal序列化库三、下载与编译四、使用 一、什么是序列化 序列化在编程中有以下几个重要的原因&#xff1a; 数据存储&#xff1a;将数据对象序列化为一种持久化的格式&#xff0c;可以将其存储在文件、数据库或其他存储介质中。这样可以在程序的不同…

视觉SLAM第二讲

SLAM分为定位和建图两个问题。 定位问题 定位问题是通过传感器观测数据直接或间接求解位置和姿态。 通常可以分为两类&#xff1a;基于已知地图的定位和基于未知地图的定位。 基于已知地图的定位 利用预先构建的地图&#xff0c;结合传感器数据进行全局定位。SLAM中的全局…

HDU1056——HangOver,HDU1057——A New Growth Industry,HDU1058——Humble Numbers

目录 HDU1056——HangOver 题目描述 运行代码 代码思路 HDU1057——A New Growth Industry 题目描述 运行代码 代码思路 HDU1058——Humble Numbers 题目描述 运行代码 代码思路 HDU1056——HangOver 题目描述 Problem - 1056 运行代码 #include <iostream&…

html+css+js 实现马赛克背景按钮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…

报错Found dtype Long but expected Float解决办法

Found dtype Long but expected Float错误通常发生在尝试将一个数据类型为Long的张量传递给一个期望数据类型为Float的函数或操作时。 在PyTorch中&#xff0c;Long和Float是两种常见的数据类型&#xff0c;分别对应于64位整数和32位浮点数。某些函数或操作可能只接受特定数据…

详细分析 Bladex中的swagger-resources资源未授权访问的解决方法

目录 1. 问题所示2. 原理分析2.1 RouterFunctionConfiguration 类2.2 SwaggerResourceHandler 类3. 解决方法3.1 网关过滤3.2 去除配置3.3 代码修改4. 彩蛋1. 问题所示 从而也导致资源接口文件泄露 https://xxx/swagger-resources 或者 ip:端口号/swagger-resources 2. 原理分…

数据仓库设计与数据建模初探

一、为什么需要引入数据仓库 数据仓库本质上是一种数据库&#xff0c;但它有一些特定的特性和用途&#xff0c;使其与传统的关系数据库有所不同。 需要分析的数据量较大&#xff08;单批 GiB&#xff09;&#xff0c;此时事务性数据库分析性能堪忧&#xff0c;需要通过建立索…

空调压力传感器

空调压力传感器是自动空调控制系统的一个传感器元件&#xff0c;其作用是防止制冷系统在极限制冷剂管路的压力下工作&#xff0c;并帮助控制发动机冷却风扇的转速。压力传感器安装在发动机舱内空调高压管路上。 该传感器向发动机ECM或空调控制单元输出压力信号&#xff0c;当检…

自学网络安全,从小白到大神的破茧之路!

在当今数字化高速发展的时代&#xff0c;网络安全已经成为了至关重要的领域。无论是个人的隐私保护&#xff0c;还是企业、国家的关键信息资产维护&#xff0c;都离不开网络安全的有力保障。出于对这一领域的浓厚兴趣以及对未来职业发展的清晰规划&#xff0c;我毅然决然地踏上…

【计算机网络】TCP负载均衡实验

一&#xff1a;实验目的 1&#xff1a;了解TCP负载均衡的配置。 2&#xff1a;学会使用NAT技术处理和外部网络的连接。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a;RCMS交换机、网线、内网网卡接口、Windows 2019操作系统的计算机等。具体为&#xff1a;二层交换机1…

Python数据分析案例55——基于LSTM结构自编码器的多变量时间序列异常值监测

案例背景 时间序列的异常值检测是方兴未艾的话题。比如很多单变量的&#xff0c;一条风速&#xff0c;一条用电量这种做时间序列异常值检测&#xff0c;想查看一下哪个时间点的用电量异常。 多变量时间序列由不同变量随时间变化的序列组成&#xff0c;这些时间序列在实际应用…

LivePortrait优化版,表情迁移,数字人,视频驱动视频v2v(WIN,MAC)

大家好&#xff0c;今天给大家分享一个由快手、中国科学技术大学和复旦大学联合团队开发的表情迁移项目——LivePortrait。老规矩&#xff0c;整合包也已经准备OK了。&#xff08;MAC用户不要担心&#xff01;这次有有有有MAC的哦&#xff01;&#xff09; 只需要上传一段参考视…

Godot入门 04平台设计

新建创景&#xff0c;添加AnimatableBody2D节点。 添加Sprite2D节点 拖动图片 剪裁图片&#xff0c;吸附模式&#xff1a;像素吸附 添加CollisionShape2D&#xff0c;设置实际形状为矩形 重命名AnimatableBody2D节点为Platform&#xff0c;保存场景&#xff0c;拖动platform场景…

20 B端产品的数据分析

数据分析的价值 数据衡量业务&#xff1a;通过管理数据报表&#xff0c;可以快速衡量业务发展状态。 数据洞察业务&#xff1a;通过数据分析&#xff0c;可以找到业务发展的机遇。 数据驱动指导业务&#xff1a;基于数据&#xff0c;驱动业务决策&#xff0c;数据支撑决策。 …

Django5之视图装饰器

本节主要介绍Django框架视图层中装饰器的内容。视图装饰器用来对视图函数进行相关的控制操作&#xff0c;实现了对各种HTTP特性的支持功能。 4.5.1 允许HTTP方法 在Django框架中&#xff0c;位于django.views.decorators.http模块的装饰器被用来限制可以访问该视图的HTTP请求…

RICHTEK立锜科技静态耗电的nanoPower Buck转换器RT5713/RT5714

RT5713/14 是静态耗电只有 360nA 的高效同步 Buck 转换器&#xff0c;即使负载电流低达 10mA 时也能保持其很高的转换效率。其输入电压范围为 2.2V~5.5V&#xff0c;输出电压为两档可选&#xff0c;通过电压选择引脚 VSEL 即可进行设定&#xff0c;负载能力可达 0.5A/1A。 它采…

字符串格式化(不造轮子)

jdk提供的字符串格式化工具类String.format、MessageFormat使用的占位符不够直观&#xff0c;除了使用重量级的模板引擎外&#xff0c;寻求一种轻量级的方式 Apache StringSubstitutor commons-text包下的org.apache.commons.text.StringSubstitutor类 <dependency><…