【问题】老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。

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

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

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

【思路】首先我们对整个数组进行初始化为1,dp[n]中元素都为1,第一次从左向右进行遍历,如果右边的得分大于左边的得分,则右边分得的糖果数比坐边多一个,不能贪多哟!但是我们并没有更新左边得分大于右边得分的情况,因此需要第二次遍历!

第二次遍历从右向左,类似于第一次,当ratings[i]>ratings[i+1]的同时,还要满足dp[i]<=dp[i+1],为什么要多一个条件呢?这是因为第一次遍历确定了部分糖果数的正确大小关系,第二次遍历不能更改,加上这个条件后,我们只更新第一次遍历错误的糖果数!

C++代码:时间复杂度O(2*n)=O(n)

class Solution {
public:
int candy(vector<int>& ratings) {
int n = ratings.size();
if(n < )
return n;
vector<int> dp(n, );
for(int i = ;i < n; i++){
if(ratings[i-] < ratings[i]){
dp[i] = dp[i-] + ;
}
}
for(int i = n-; i >= ; i--){
if(ratings[i] > ratings[i+] && dp[i] <= dp[i+]){
dp[i] = dp[i+] + ;
}
}
int sum = ;
for(int i: dp){
sum += i;
}
return sum;
}
};

【LeetCode】分发糖果的更多相关文章

  1. LeetCode:135. 分发糖果

    LeetCode:135. 分发糖果 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分. 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分 ...

  2. [LeetCode] 135. 分发糖果

    题目链接 : https://leetcode-cn.com/problems/candy/ 题目描述: 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分 ...

  3. Java实现 LeetCode 135 分发糖果

    135. 分发糖果 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分. 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果. ...

  4. [Swift]LeetCode135. 分发糖果 | Candy

    There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...

  5. 【leetcode-135,62,63 动态规划】分发糖果 ,不同路径

    分发糖果 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分. 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果. 相邻的孩 ...

  6. LeetCode.1103-向人们分发糖果(Distribute Candies to People)

    这是小川的第393次更新,第425篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第256题(顺位题号是1103).我们通过以下方式向一排n = num_people个人分 ...

  7. leetcode 135分发糖果

    这是一道hard题,不好想,但最后还是想出来了,私以为还是根据一些思想方法自己想出来做法印象比较深刻,其次看人家的做法思想自己写代码,其次看代码理解默写,其次直接抄代码: 首先,给每个孩子都发一个糖果 ...

  8. LeetCode 135——分发糖果

    1. 题目 2. 解答 初始化左序奖赏全为 1,从左往右遍历,如果右边的人评分比左边高,右边奖赏比左边奖赏增 1. 初始化右序奖赏全为 1,从右往左遍历,如果左边的人评分比右边高,左边奖赏比右边奖赏增 ...

  9. [Leetcode 135]糖果分配 Candy

    [题目] There are N children standing in a line. Each child is assigned a rating value. You are giving ...

随机推荐

  1. Echarts 折线图y轴标签值过长 显示

    参考: https://blog.csdn.net/dandelion_drq/article/details/79270597 改变Y轴单位:https://www.cnblogs.com/cons ...

  2. python2学习------基础语法1 (变量、分支语句、循环语句、字符串操作)

    1.变量类型 Numbers(数字):int,float,long String(字符串) List(列表) tuple(元组) dict(字典) bool(布尔):True,False # 删除变量 ...

  3. springboot项目启动报错 Failed to configure a DataSource: 'url' attribute is not specified and no embedde

    参考:https://blog.csdn.net/Coyotess/article/details/80637837

  4. eos 智能合约开发体验

    eos编译安装 eos 特性 数据存储 eos投票智能合约开发 eos投票智能合约部署测试 注意避坑 eos编译安装 ERROR: Could not find a package configura ...

  5. JAVA基础-反射机制

    什么是JAVA的反射机制 Java反射是Java被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其 ...

  6. dom与jq基础使用

    js有两种运行环境,一个是浏览器,一个是服务器(NodeJS) js的本质是es,因为运行环境的不同,为了操作环境内的api做了升级 在浏览器上js分为es + dom + bom 在服务器上js又有 ...

  7. CentOS7.x关闭防火墙

    使用命令:systemctl status firewalld.service 查看防火墙状态 执行后可以看到绿色字样标注的“active(running)”,说明防火墙是开启状态 使用命令:syst ...

  8. Linux下Tomcat带日志启动命令

    在Linux环境下,启动Tomcat时我们需要在启动过程中看到日志信息.可以通过下面命令启动Tocmat. ./startup.sh; tailf ../logs/catalina.out或者 ./s ...

  9. scan port

    $sudo apt-get install nmap $nmap 127.0.0.1 Starting Nmap 7.60 ( https://nmap.org ) at 2020-02-20 15: ...

  10. PLC与单片机执行指令区别

    单片机执行指令方式与PLC执行指令方式对比 . 映射 对顺序功能图并行分支的理解.   PLC与单片机都是顺序执行指令方式的. PLC执行指令分为3个阶段. PLC的一个指令周期包括 输入采样 程序执 ...