• leetcode 135. 分发糖果


    n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。

    你需要按照以下要求,给这些孩子分发糖果:

    每个孩子至少分配到 1 个糖果。
    相邻两个孩子评分更高的孩子会获得更多的糖果。
    请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

    示例 1:
    输入:ratings = [1,0,2]
    输出:5
    解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。

    示例 2:
    输入:ratings = [1,2,2]
    输出:4
    解释:你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。
    第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。

    提示:
    n == ratings.length
    1 <= n <= 2 * 104
    0 <= ratings[i] <= 2 * 104
    题目链接:链接
    思路,可以采用贪心法,从左往右遍历,默认是1,如果 ratings[i] > ratings[i-1], 则右边的数等于左边数加+, 同理,再从右往左遍历一次。

    class Solution:
        def candy(self, ratings: List[int]) -> int:
            nums = [1 for i in range(len(ratings))]
            for i in range(1, len(nums)):
                if ratings[i] > ratings[i-1]:
                    nums[i] = nums[i-1]+1
            res = nums[len(nums)-1]
            for i in range(len(nums)-2, -1, -1):
                if ratings[i] > ratings[i+1]:
                    nums[i] = max(nums[i], nums[i+1]+1)
                res += nums[i]
            return res
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    ArcGIS学习(十四)OD分析
    01背包(一) 01背包(二)动态规划
    《七月集训》(第二十一天)——堆(优先队列)
    Redis 实现延迟队列
    微信小程序自定义导航
    本机配置SSH连接代码仓库
    React快速开发框架
    flex布局实现 内容区域高度自适应
    【无标题】
    CSS伪类介绍
  • 原文地址:https://blog.csdn.net/hnu2012/article/details/133064534