leetcode135题:Candy

leetcode135题:Candy

老师想给孩子们发糖果,有 N 个孩子站成了一条直线,老师根据每一个孩子的表现情况,会预先给他们每个人都打好评分。

你要按照以下要求帮助老师给这些孩子分发糖果:

每个孩子都至少应该有1个糖果。
相邻的孩子中,评分高的孩子必须获得更多的糖果。
那么这样下来,至少需要准备多少颗糖果呢?


  • 思路:candies列表是每个小朋友得到的糖果数。我们首先从左往右遍历,给candies列表赋初值,如果当前小朋友的分数比前1位小朋友的高,则分给当前小朋友的糖果数=前1位小朋友的糖果数+1,否则当前小朋友的糖果数=1(满足每个孩子至少有1颗糖)。然后,再从右到左遍历,需要再比较当前小朋友和后1位小朋友的分数,因此,但此时,由于我们已经给candies列表赋过初值,即如果满足当前小朋友的分数比后一位小朋友高时,当前小朋友的糖果数也比后一位小朋友的糖果数高时,则说明原始candies列表满足条件,否则需要修改当前小朋友的糖果为后一位小朋友的糖果数+1。
class Solution:
    #使用贪心算法
    def candy(self, ratings):
        """
        :type ratings: List[int]
        :rtype: int
        """
        n = len(ratings)
        if n==0:
            return 0
        candies = [0]*n
        #先从左向右遍历,初步给每位小朋友赋糖果初值
        for i in range(n):
            if i==0:
                candies[i]=1
            else:
                if ratings[i]>ratings[i-1]:
                    candies[i] = candies[i-1]+1
                else:
                    candies[i] = 1
        for i in range(n-1,-1,-1):
            if i==n-1:
                continue
            else:
                if ratings[i]>ratings[i+1]:
                    candies[i] = max(candies[i],candies[i+1]+1)
                else:
                    continue
        res = sum(candies)
        return res

猜你喜欢

转载自blog.csdn.net/qq_35559420/article/details/79917980
今日推荐