美文网首页
135. Candy

135. Candy

作者: morningstarwang | 来源:发表于2021-02-04 15:28 被阅读0次

Ref: https://leetcode-cn.com/problems/candy/

这道题对糖果的分配规则属于局部最优,因此考虑贪心算法。由于仅需比较相邻孩子的评分大小,故考虑左规则left和右规则right分别正序和反序遍历数组,具体如下:

  • 左规则:从左向右遍历数组,如果ratings[i] > ratings[i - 1],则left[i] = left[i-1] + 1
  • 右规则:从右向左,如果ratings[i] > ratings[i + 1],则right[i] = right[i + 1] + 1
    最后,遍历left和right,累加max(left[i], right[i])得到最终结果。算法代码如下:
class Solution:
    def candy(self, ratings: List[int]) -> int:
        l = len(ratings)
        if l == 0:
            return 0
        left = [1 for _ in range(l)]
        right = left[:]
        count = 1
        for i in range(1, l):
            if ratings[i] > ratings[i - 1]:
                left[i] = left[i - 1] + 1
            count = left[-1]       
        for i in range(l - 2, -1, -1):
            if ratings[i] > ratings[i + 1]:
                right[i] = right[i + 1] + 1
            count += max(left[i], right[i])        
        return count

相关文章

  • 135. Candy [Hard] DP

    135. Candy

  • 经典算法题:分发糖果

    135. 分发糖果[https://leetcode.cn/problems/candy/] 难度:困难 n 个孩...

  • 135. Candy

    题目 思路 dp[i]:记录i的获取糖果树 从左向右扫描,保证一个方向上分数更大的糖果更多 从右向左扫描,保证另一...

  • 135. Candy

    题目分析 There are N children standing in a line. Each child ...

  • 135. Candy

    There are N children standing in a line. Each child is as...

  • 135. Candy

    题目描述:N个孩子坐在一排,每个孩子分配一个等级值,按如下要求给每个孩子分糖: 每个孩子至少有一个 等级高的孩子比...

  • 135. Candy

    There are N children standing in a line. Each child is as...

  • 135. Candy

    问题分析 There are N children standing in a line. Each child ...

  • 135. Candy

    根据题意及贪心思想:评分高的学生必须获得更多的糖果 等价于 所有学生满足左规则且满足右规则

  • 135. Candy

    Ref: https://leetcode-cn.com/problems/candy/[https://leet...

网友评论

      本文标题:135. Candy

      本文链接:https://www.haomeiwen.com/subject/qfubtltx.html