当前位置: 首页 > news >正文

leetcode2_135.分发糖果

leetcode学习算法之贪心算法:135.分发糖果

题目描述
n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
每个孩子至少分配到 1 个糖果。
相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

示例 :
输入:ratings = [1,0,2]
输出:5
解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。

代码

class Solution:def candy(self, ratings: List[int]) -> int:candy = [1 for i in range(len(ratings))]for i in range(1, len(ratings)):if ratings[i-1] < ratings[i]:candy[i] = candy[i-1] + 1for i in range(len(ratings)-1, 0, -1):if ratings[i] < ratings[i-1]:candy[i-1] = max(candy[i-1], candy[i] + 1)# print(candy)return sum(candy) 

调用测试

ratings = [1,2,87,87,87,2,1]
# 创建 Solution 类的实例
solution = Solution()
# 调用方法
result = solution.candy(ratings)
# 输出结果
print("最多需要", result, "个糖果")

刚开始时在第一个for循环种使用: candy[i] += 1
在测试用例没用重复的得分时,运行结果正确,但是面对有重复紧挨的得分时,结果总是少1个,测试用例不正确。需要修改为:candy[i] = candy[i-1] + 1
首先不看解题思路,自己思考的思路是:先找到最小元素的值和位置,再分别从最小元素的位置向左右两边进行比较,分配糖果,但是这个只考虑了一个分享,没有考虑一个元素有两个相邻的值。
后面看了解题思路后,醍醐灌顶,算法真的很奇妙。

贪心算法中需要获得大小关系时,需要对计算的列表进行排序;
贪心算法中存在位置上的比较关系时,不一定要进行排序。

http://www.dtcms.com/a/286115.html

相关文章:

  • 信息安全性测试:渗透测试、漏洞扫描与代码审计全解析
  • 基于ECDH的隐私求交(PSI)技术发展历程
  • 进阶向:智能图像增强系统
  • 项目优化之开机自启动
  • kubernetes pod 深度解析
  • 持续同调文章阅读(四)
  • Selenium 攻略:从元素操作到 WebDriver 实战
  • 基于Spring Boot的农村农产品销售系统设计与实现
  • SGLang 推理框架深度解析:请求的调度与生命周期
  • 客户知识共享门户的核心价值:提升效率与客户体验
  • 网页的性能优化,以及具体的应用场景
  • 安卓页面卡顿测试方案详解
  • FLTK UI窗口关闭时延时卡顿问题全流程分析与优化实战
  • pip用国内的源 + Hugging Face 官方国内镜像
  • 基于华为openEuler系统安装DailyNotes个人笔记管理工具
  • LP-MSPM0G3507学习--03时钟配置
  • 如何阅读Spring源码
  • 脚手架本地link标准流程
  • 25数据库三级备考自整理笔记
  • Linux文件传输工具:lrzsz
  • C#测试调用ServiceController类查询及操作服务的基本用法
  • Python数据类型探秘:解锁编程世界的魔法钥匙
  • Vue (Official) v3.0.2 新特性 为非类npm环境引入 globalTypesPath 选项
  • 【爬虫】03 - 爬虫的基本数据存储
  • DolphinDB × Vanna:构建支持自然语言查询的企业级 RAG 系统
  • bash-completion未安装或未启用
  • IELTS 阅读C15-Test 2-Passage 1
  • LeafletJS 性能优化:处理大数据量地图
  • 零基础入门:用C++从零实现TCP Socket网络小工具
  • 二进制写入与文本写入的本质区别:系统视角下的文件操作