【Leetcode】贪心算法-分配问题-135

>0️⃣python数据结构与算法学习路线
>学习内容:
>- 基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等...
>- 数据结构:字符串(string)、列表(list)、元组(tuple)、字典(dictionary)、集合(set)、数组、队列、栈、树、图、堆等...

题目:

一群孩子站成一排,每一个孩子有自己的评分。现在需要给这些孩子发糖果,规则是如果一个孩子的评分比自己身旁的一个孩子要高,那么这个孩子就必须得到比身旁孩子更多的糖果;所有孩子至少要有一个糖果。求解最少需要多少个糖果。

输入输出:

输入是一个数组,表示孩子的评分。输出是最少糖果的数量。
Input: [1,0,2]
Output: 5

解题思路:

只需遍历两次即可:把所有孩子的糖果数初始化为 1; 先从左往右遍历一遍,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的糖果数加 1 ;再从右往左遍历一遍,如果左边孩子的评分比右边的高,且左边孩子当前的糖果数不大于右边孩子的糖果数,则左边孩子的糖果数更新为右边孩子的糖果数加 1

算法实现:

class Solution(object):
    def candy(self, ratings):
        l = len(ratings)
        tang = [1]*l#如何定义长度为len(ratings)的列表?
        for i in range(0,l-1):
            if ratings[i] < ratings[i+1]:
                tang[i+1] = tang[i]+1
            '''
            elif ratings[i] == ratings[i+1]:
                tang[i+1] = tang[i]
            '''
        for j in range(l-1,0,-1):
            if ratings[j] < ratings[j-1]:
                    tang[j-1] = max(tang[j]+1,tang[j-1])
        return sum(tang)

出现问题:

1.range(start,end,步长)函数使用

range(0,5)输出是0-4对应的数而不是0-5

反向遍历的时候range(l,-1,-1)是从后往前取

想要到第一个数才结束要到-1而不是0,算是从l开始而不能写range(0,l,-1)

在进行循环的时候要注意循环中应用的是i-1还是i,注意范围不要超

2.判断等于是==而不是=

3.求列表的和可以用sum(tang)

用for z in tang:

      res +=z是错的(没明白为什么)

4.break和continue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪里摸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值