当前位置: 首页 > 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.lryc.cn/news/592322.html

相关文章:

  • leetcode15.三数之和题解:逻辑清晰带你分析
  • 华为欧拉系统(openEuler)安装 Docker 容器完整教程
  • Gemini Function Calling 和 Qwen3 Embedding和ReRanker模型
  • 服务器清理空间--主要是conda环境清理和删除
  • 弧焊机器人智能节气装置
  • Huber Loss(胡贝损失)详解:稳健回归的秘密武器 + Python实现
  • 【Git专栏】git如何切换到某个commit(超详细)
  • 铁路基础设施无人机巡检技术及管理平台
  • 【IOS webview】IOS13不支持svelte 样式嵌套
  • 计算机网络知名端口分配全表(0-1023)
  • 前端之CSS
  • Http请求中的特殊字符
  • 太阳辐射监测站:洞察太阳能量的科技之眼
  • RabbitMQ—TTL、死信队列、延迟队列
  • k8s:手动创建PV,解决postgis数据库本地永久存储
  • Java Set 集合详解:从基础语法到实战应用,彻底掌握去重与唯一性集合
  • 基于K8s ingress灰度发布配置
  • Docker报错:No address associated with hostname
  • 使用python读取json数据,简单的处理成元组数组
  • 内网部署yum源
  • 美团闪购最新版 mtgsig1.2
  • 从服务实例的元数据中获取配置值 vs 从本地配置文件中获取配置值
  • 4G模块 A7680发送中文短信到手机
  • IT66122替代IT66121-富利威
  • 「源力觉醒 创作者计划」_巅峰对话:文心 4.5 vs. DeepSeek / Qwen 3.0 深度解析(实战优化版)
  • 文件管理-文件控制块和索引节点
  • Java 抽象类与接口深度解析
  • 进阶数据结构:红黑树
  • 可靠消息最终一致性分布式事务解决方案
  • Web3加密货币交易:您需要知道的所有信息