【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://www.mzph.cn/news/876222.shtml

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

相关文章

masscan 端口扫描——(Golang 简单使用总结)

1. 前言 最近要做一个扫描 ip 端口的功能 扫描的工具有很多&#xff0c;但是如何做到短时间扫描大量的 ip 是个相对困难的事情。 市场上比较出名的工具有 masscan和nmap masscan 支持异步扫描&#xff0c;对多线程的利用很好&#xff0c;同时仅仅支持 syn 半开扫描&#xff…

采用先进的人工智能视觉分析技术,能够精确识别和分析,提供科学、精准的数据支持的明厨亮灶开源了。

明厨亮灶视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。AI技术可以24小时…

SEO与数据中心代理IP的结合能带来哪些便利?

本文将探讨将SEO与数据中心代理IP结合所带来的好处&#xff0c;以及如何利用这种组合来提升网站在搜索引擎中的排名和可见性。 1. 数据中心代理IP的作用和优势 数据中心代理IP指的是由数据中心提供的IP地址&#xff0c;用于隐藏真实服务器的位置和身份。与其他类型的代理IP相…

【Java基础系列】RBAC:介绍与原理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【C++】:红黑树的应用 --- 封装map和set

点击跳转至文章&#xff1a;【C】&#xff1a;红黑树深度剖析 — 手撕红黑树&#xff01; 目录 前言一&#xff0c;红黑树的改造1. 红黑树的主体框架2. 对红黑树节点结构的改造3. 红黑树的迭代器3.1 迭代器类3.2 Begin() 和 End() 四&#xff0c;红黑树相关接口的改造4.1 Find…

Java OpenCV 图像处理41 图形图像 图片缩放

Java OpenCV 图像处理41 图形图像 图片缩放 1 图片缩放2 仿射变换3 透视变换 1 图片缩放 Java OpenCV 代码 OpenCV 提供的主要图像缩放函数&#xff0c;可以指定缩放比例或者目标尺寸。 Imgproc.resize(src, dst, new Size(width, height), fx, fy, interpolation);Imgproc.r…

科学又省力 宠物浮毛怎么去掉便捷高效?除毛秘籍养宠空气净化器

上次和朋友逛完街去她家&#xff0c;她家的猫哈基米一开门就飞奔过来&#xff0c;朋友直接抱起它狂亲。结果&#xff0c;猫毛和汗水粘得到处都是&#xff0c;手臂上、脸上都是&#xff0c;看得我这鼻炎星人直起鸡皮疙瘩。很多养宠物的朋友都说&#xff0c;天天给猫狗梳毛&#…

ProcessExplorer免费且功能强大的进程管理软件

ProcessExplorer是一款功能强大的进程管理软件&#xff0c;由Sysinternals开发&#xff0c;并被微软收购。它不仅可以管理和监控系统中的进程&#xff0c;还提供了许多实用的功能&#xff0c;如CPU和内存使用情况的曲线图表、DLL和句柄查看、进程冻结等。 安装ProcessExplorer…

微服务安全——OAuth2.1详解、授权码模式、SpringAuthorizationServer实战、SSO单点登录、Gateway整合OAuth2

文章目录 Spring Authorization Server介绍OAuth2.0协议介绍角色OAuth2.0协议的运行流程应用场景授权模式详解客户端模式密码模式授权码模式简化模式token刷新模式 OAuth 2.1 协议介绍授权码模式PKCE扩展设备授权码模式拓展授权模式 OpenID Connect 1.0协议Spring Authorizatio…

Axious的请求与响应

Axious的请求与响应 1.什么是Axious Axious是一个开源的可以用在浏览器和Node.js的异步通信框架&#xff0c;它的主要作用就是实现AJAX异步通信&#xff0c;其功能特点如下&#xff1a; 从浏览器中创建XMLHttpRequests ~从node.js创建Http请求 支持PromiseAPI 拦截请求和…

电信应用的振荡器基础知识

数字通信的最基本组成部分是同步。同步有很多方面。在数字传输中&#xff0c;同步是通过管理跨节点的平均传输和接收速率来管理无错误的传输和接收。在蜂窝通信中&#xff0c;同步使用户设备在移动中以及从一个小区移动到另一个小区时能够可靠地工作。在 5G 等先进网络中&#…

为什么w 和 b成同比例变化对超平面没有影响

文章目录 解释可视化证明数乘角度进行解释可视化代码领取 解释 在机器学习中&#xff0c;特别是支持向量机&#xff08;SVM&#xff09;和线性回归等模型中&#xff0c;参数 w w w和 b b b分别代表权重向量和偏置项。当说 w w w和 b b b成规模变化对超平面没有影响时&#xff…

pikachu靶场之目录遍历、敏感信息泄露

一、目录遍历 漏洞概述 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量&#xff0c;从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时&#xff0c;便会将请求的这个文件的值(比如文件名称)传递到后台&#xff0c;后台再执行其对应的文件。 在这个过…

邮件攻击案例系列二:冒充合作伙伴伪造发票商务邮件诈骗

案例描述 2023 年 11 月下旬&#xff0c;某知名外贸公司财务人员收到一封来自境外合作伙伴的邮件&#xff0c;说明有一张发票即将于 11 月 29 日到期的&#xff0c;希望该外贸公司能尽快付款。 该邮件有两个附件&#xff0c;一个附件是即将到期发票的电子版&#xff0c;一个附…

PHP8.3.9安装记录,Phpmyadmin访问提示缺少mysqli

ubuntu 22.0.4 腾讯云主机 下载好依赖 sudo apt update sudo apt install -y build-essential libxml2-dev libssl-dev libcurl4-openssl-dev pkg-config libbz2-dev libreadline-dev libicu-dev libsqlite3-dev libwebp-dev 下载php8.3.9安装包 nullhttps://www.php.net/d…

stable diffusion+LangChain+LLM自动生成图片

最近都在研究和学习stable diffusion和langchain的相关知识&#xff0c;并且看到stable diffusion也是有类似于ChatGLM的api调用方式&#xff0c;那在想有没有可能将stable diffusion也集成到langchain中来呢&#xff1f;看到网上资料比较多的是可以借助chatgpt来辅助stable di…

深度学习的前沿主题:GANs、自监督学习和Transformer模型

&#x1f48e; 欢迎大家互三&#xff1a;2的n次方_ &#x1f48e;1. 介绍 深度学习在人工智能领域中占据了重要地位&#xff0c;特别是生成对抗网络&#xff08;GANs&#xff09;、自监督学习和Transformer模型的出现&#xff0c;推动了图像生成、自然语言处理等多个领域的创…

【计算机网络】DHCP实验

一&#xff1a;实验目的 1&#xff1a;深入理解DHCP&#xff08;动态主机配置协议&#xff09;的工作原理和数据包交换过程。 2&#xff1a;掌握如何通过命令行释放和重新获取IP地址&#xff0c;并通过抓包软件分析DHCP消息的具体内容。 二&#xff1a;实验仪器设备及软件 硬…

什么是死锁,原子性

20240727 一、什么是死锁原子性 一、什么是死锁 原子性

CentOS7下操作iptables防火墙和firewalld防火墙

CentOS7下操作iptables防火墙和firewalld防火墙 &#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、…