代码随想录算法训练营 Day34 贪心算法3

本文介绍了如何使用贪心算法解决1005题中的糖果分发问题,通过比较相邻孩子的分数,确保每次给得分较低的孩子多分配一个糖果,从而在K次取反操作后最大化数组和。代码示例展示了这个过程和实现方法。
摘要由CSDN通过智能技术生成

Day34 贪心算法3

1005.K次取反后最大化的数组和

134. 加油站

tbd

135. 分发糖果

思路

局部最优:先给第一个孩子分配最少的一个糖果,如果下一个孩子评分更低,则相应再给原来的孩子加一个糖果
不知道怎么写代码

根据代码随想录
要点:

  1. 需要考虑两边的情况,要先确定一边,再确定另一边;两边一起比较会乱
  2. 先确定一边:右边的小孩比左边得分高
  3. 默认糖果初始数量为1,如果右边的打,那就加一
  4. 左边比右边孩子得分高,需要从右往左遍历
  5. 得到的两组数,取最大的

最终代码:

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

总结:
模拟一下整个过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值