135. 分发糖果

这篇博客讨论了LeetCode上的'分发糖果'问题,通过动态规划的方法解决。文章详细解释了如何确定数字是位于山坡脚还是山坡上,并阐述了如何确定每个位置的值。在给定的示例中,展示了如何根据山坡脚和山坡的高度来分配糖果,确保公平性。最后,提出了从左到右再到右的遍历策略来正确计算每个位置的糖果数量。
摘要由CSDN通过智能技术生成

题目 https://leetcode.cn/problems/candy/submissions/
官方题解 https://leetcode.cn/problems/candy/solution/fen-fa-tang-guo-by-leetcode-solution-f01p/

每个数字一定存在于唯一的山峰上,比方说下图的[1,2,4,3,2,1]组成一个山峰。如果是[1,2,1,2,1]呢?就有两个山峰。我们定义两个位置的点: 山坡脚和山坡上。

  • 如果一个数字左右两侧是单调的,或者它大于左右两侧(山顶),那么它在山坡上。
  • 否则,它在山坡脚。符合情况的比如左右两侧都等于/大于自身,左侧或右侧等于/自身。
  • 每两个山坡脚之间的数都可以看做一座山峰。

比如在ratings=[2,3,4,3,3,2,3]里, 加粗体的ratings[0], ratings[3], ratings[5]是山坡脚,其它位置是山坡上。山坡脚的位置值一定是能取,且应当取1的(如果不取了大于1的数,那么将其替换为1,可以得到更优解)。

然后,山坡上位置的值,都由它所在的那个山峰决定的。山顶的值取决于它两个山坡中高度更高的那个。比如在ratings[0:4]之间,由于山脚res[0]、res[3]都是取1,而山顶ratings[2]的左山坡高度为3,右山坡高度为2,所以res[2]=3。而ratings[1]在左山坡,所以res[1]=2。

证明了这一点,我们就能明白,为什么从左到右,再从右到左遍历,得到的值是正确的了。因为一个位置的值,只会由它的山峰左右两侧的山坡决定。

所以代码如下:

class Solution {
   
    public int 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值