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

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.xdnf.cn/news/15714.html

相关文章:

  • ollma dify 搭建合同审查助手
  • 【Python】一些PEP提案(三):with 语句、yield from、虚拟环境
  • MySQL中的索引和事务
  • vue2 面试题及详细答案150道(81 - 90)
  • 解锁 Java 并发编程的奥秘:《Java 并发编程之美》中的技术亮点与难题攻克
  • FastAdmin后台登录地址变更原理与手动修改方法-后台入口机制原理解析-优雅草卓伊凡
  • 【计算机网络】MAC地址与IP地址:网络通信的双重身份标识
  • TCP通讯开发注意事项及常见问题解析
  • 接口测试的原则、用例与流程详解
  • 百度权重提升技巧分析:从底层逻辑到实战策略
  • 某邮生活旋转验证码识别
  • 函数返回值问题,以及返回值的使用问题(c/c++)
  • 4G模块 A7680发送中文短信到手机
  • 2-大语言模型—理论基础:详解Transformer架构的实现(2)
  • 雾化技术赋能 全鼎如何打造软磁材料护城河
  • 最小生成树算法详解
  • 基于单片机红外感应智能卫生间系统仿真论文
  • 开源Docmost知识库管理工具
  • Web开发 02
  • MariaDB 10.4.34 安装配置文档(Windows 版)
  • ChatGPT Agent:统一端到端Agentic模型的技术革新与行业影响
  • 深度学习模型开发部署全流程:以YOLOv11目标检测任务为例
  • 【CF】⭐Day104——Codeforces Round 840 (Div. 2) CE (思维 + 分类讨论 | 思维 + 图论 + DP)
  • hadoop(服务器伪分布式搭建)
  • 一文讲清楚React性能优化
  • 谷歌浏览器Chrome的多用户配置文件功能
  • 电脑视频常用几种接口
  • Python 数据分析与可视化:从基础到进阶的技术实现与优化策略
  • MyBatis之关联查询
  • web开发-CSS/JS