资讯专栏INFORMATION COLUMN

【LeetCode】贪心算法--分发糖果(135)

刘永祥 / 1682人阅读

摘要:今日题目老师想给孩子们分发糖果,有个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。相邻的孩子中,评分高的孩子必须获得更多的糖果。示例输入输出解释你可以分别给这三个孩子分发颗糖果。第三个孩子只得到颗糖果,这已满足上述两个条件。

今日题目

老师想给孩子们分发糖果,有N个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。
你需要按照以下要求,帮助老师给这些孩子分发糖果:
每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?

示例 1:
输入: [1,0,2]
输出: 5
解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。
示例 2:
输入: [1,2,2]
输出: 4
解释: 你可以分别给这三个孩子分发 1、2、1 颗糖果。第三个孩子只得到 1 颗糖果,这已满足上述两个条件。

题目分析

对于这个问题,主要的条件是要相邻孩子,得分高的拿的糖果要多(不包括相等得分),还有就是每个人最少都要有一个。
解决这个问题我们还是采用贪心算法,首先初始化每个人分配的糖果数量都是1,然后这个算法需要遍历两遍,第一遍从左往右遍历,如果当前孩子的分数大于前一个孩子的分数,则当前孩子得到的糖果在前一个孩子的基础上加1;然后,第二遍从右往左遍历,如果当前孩子的分数大于他右边孩子的分数,并且他的糖果不比他右边孩子多,则糖果数在他基础上加1;最后,将所有孩子的糖果数相加即可。
第二次遍历是为了处理数组中降序和有出现相邻孩子分数相同的情况。

代码实现

class Solution:

def candy(self, ratings):
   """
   :type ratings: List[int]
   :rtype: int
    """
   num = [1]*len(ratings)
   for i in range(0,len(ratings)-1):
   if ratings[i+1] > ratings[i]:
       num[i+1] = num[i] + 1     
   for i in range(len(ratings)-1,0,-1):
       if ratings[i] < ratings[i-1]:
           num[i-1] = max(num[i]+1,num[i-1])

   return sum(num)


写在最后

寒假已经跟一个小伙伴商量好一起刷题,感兴趣的小伙伴也可以加入我们,希望大家每天可以交流刷题的心得,为了保证质量我会控制人数,大约在12人左右。

推荐阅读:
Python骚操作 | 用Python来P图

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43021.html

相关文章

  • LeetCode贪心算法--划分字母区间(763)

    摘要:写在前面今天这篇文章是贪心算法系列的第三篇划分字母区间。前文回顾贪心算法分发糖果刷题汇总汇总贴今日题目字符串由小写字母组成。返回一个表示每个字符串片段的长度的列表。示例输入输出解释划分结果为。每个字母最多出现在一个片段中。 写在前面 今天这篇文章是贪心算法系列的第三篇--划分字母区间。 前文回顾: 【LeetCode】贪心算法--分发糖果(135) 刷题汇总: 【LeetCode】汇总...

    honhon 评论0 收藏0
  • leetcode135. Candy

    摘要:题目要求假设有个孩子站成一排,每个孩子拥有一个评估值。我们可以观察到,每次最远只需要额外分发到距离当前最近的评分最高的那个孩子。因为他的糖果数量的增加并不会影响到之前孩子。当有多个最近评分最高的孩子时,则选择最后一个。 题目要求 There are N children standing in a line. Each child is assigned a rating value....

    shmily 评论0 收藏0
  • [Leetcode] Candy 分糖果

    摘要:贪心法复杂度时间空间思路典型的贪心法,如果一个孩子比另一个孩子的分高,我们只多给块糖。我们可以先从左往右遍历,确保每个孩子根他左边的孩子相比,如果分高,则糖要多个,如果分比左边低,就只给一颗。 Candy There are N children standing in a line. Each child is assigned a rating value. You are gi...

    张宪坤 评论0 收藏0
  • LeetCode贪心算法--买卖股票的最佳时机 II(122)

    摘要:贪心算法每一步必须满足一下条件可行的即它必须满足问题的约束。四题目分析贪心算法,总是做出在当前看来是最好的选择,不从整体最优上加以考虑,也就是说,只关心当前最优解,按照贪心策略,不关心以后,我们只关心当前利益。 一、写在前面 为什么要在LeetCode刷题?大家都知道不管是校招还是社招算法题是必考题,而这一部分恰巧是大多数人的短板,所以刷题首先是为了提高自身的编程能力,能够在算法面试中...

    xbynet 评论0 收藏0
  • LeetCode——Longest Substring Without Repeating Char

    摘要:原问题我的沙雕解法无重复字母存在重复字母挨打最暴力的无脑解法,耗时。。。 原问题 Given a string, find the length of the longest substring without repeating characters. Example 1: Input: abcabcbb Output: 3 Explanation: The answer is a...

    forsigner 评论0 收藏0

发表评论

0条评论

刘永祥

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<