算法-Candy-分发糖果

CSP-J2021 A. 分糖果 题目背景 红太阳幼儿园的小朋友们开始分糖果啦! 题目描述 红太阳幼儿园有n个小朋友,你是其中之一。保证n≥2。 有一天你在幼儿园的后花园里发现无穷多颗糖果,你打算拿一些糖果回去分给幼儿园的小朋友们。 由于你只是个平平无奇的幼儿园小朋友,所以你的体力有限,至多只能拿R块糖回去。 但是拿的太少不够分的,所以你至少要拿L块糖回去。保证nL R n≤L≤R。也就是说,如果你拿了k块糖,那么你需要保证L≤k≤R。 如果你拿了k块糖,你将把这k块糖放到篮子里,并要求大家按照如下方案分糖果:只要篮子里有不. 阅读详情

1、题目介绍

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

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

2、题目分析

  • 每个孩子都会得到至少一个糖果,则用辅助数组来表示每个孩子得到的糖果数
  • 相邻,包括左邻居和右邻居,都要满足评分高的孩子糖果多。
  • 先初始化辅助数组,每个孩子都有一个糖果
  • 那么从左到右遍历一遍,碰到左邻居比自己小的元素,就给自己赋值左邻居+1
  • 从右到左遍历,遇到右邻居比自己小的元素,先检查自己现在的糖果是不是大于右邻居,不是则赋值右邻居糖果+1

3、代码实现

    public int candy(int[] ratings) {
        //初始化辅助数组
        int[] count = new int[ratings.length];
        for(int i = 0;i < count.length;i++){
            count[i] = 1;
        }
        //向左遍历
        for(int i = 1;i < ratings.length;i++){
            if(ratings[i] > ratings[i - 1]){
                count[i] = count[i - 1] + 1;
            }
        }
        //向右遍历
        for(int i = ratings.length - 2;i >= 0;i--){
            if(ratings[i] > ratings[i + 1]){
                count[i] = Math.max(count[i],count[i + 1] + 1);
            }
        }
        //统计结果
        int res = 0;
        for(int i = 0;i < count.length;i++){
            res += count[i];
        }
        return res;
    }

4、复杂度分析

  • 时间复杂度:O(N)
  • 空间复杂度:O(N)
SAP FICO实操:如何修改已发生业务数据的成本中心公司代码(附RKACOR06程序运行指南) 本文详细解析了SAP FICO系统中使用RKACOR06程序修改已发生业务数据的成本中心和公司代码的实操方法。通过实战案例分享,提供从前期准备到后期验证的全流程指南,帮助企业应对组织架构重组或财务核算体系调整时的数据迁移挑战,特别适用于跨公司代码的成本中心划转场景。 阅读详情

相关推荐

第 3 天:Actor 是什么?创建你的第一个游戏对象!

本文详细介绍 Actor 在 Unreal Engine 5 中的作用,并通过 C++ 创建你的第一个游戏对象。你将学习 Actor 的生命周期(BeginPlay、Tick)、如何添加组件(Static Mesh),并让 Actor 在游戏世界中运作。同时提供 常见问题解决方案,助你快速上手 UE5 C++ 开发!🎮 跟随本教程,构建属于你的第一个游戏对象!

m0_37643873的博客 2629

信息学奥赛一本通 1380:分糖果(candy)

把出队的小朋友u的所有有关系的未收到糖的小朋友v收到糖的时间为u收到糖的时间加1。求从小朋友C出发的单源最短路径,顶点A到顶点B的路径即为将糖果从A传到B的时间。这样就可以得到每个小朋友接收到糖果的时间,加上m后即为每个小朋友吃完糖果的时间。假设一位小朋友A接收糖果的时刻是t,那么与该小朋友有关系的小朋友接收到糖果的时刻是t+1。由于每个小朋友吃糖的时间都是m,因而该小朋友A把糖吃完的时刻是t+m。每个小朋友是一个顶点,朋友间的关系是边,糖果从每个人传到另一个人都是1秒钟的时间,因而该图是无向无权图。

君义NOIP的博客 3515

【Docker】Docker安装Hadoop分布式集群

hadoop目录安装在:/usr/local/hadoop-2.7.0/etc/hadoop。访问Hadoop102:9870,查看是否能够看到hdfs界面。访问hadoop103:8088,查看能够看到yarn界面。在yarn上可以看到执行情况。

weixin_46429290的博客 3459

分糖果(信息学奥赛一本通 - T1380)

题目描述 童年的我们,将和朋友分享美好的事物作为自己的快乐。 这天,C 小朋友得到了Plenty of candies,将要把这些糖果分给要好的朋友们。 已知糖果从一个人传给另一个人需要 1 秒的时间,同一个小朋友不会重复接受糖果。 由于糖果足够多,如果某时刻某小朋友接受了糖果, 他会将糖果分成若干份,分给那些在他身旁且还没有得到糖果的小朋友们,而且自己会吃一些糖果。 由于嘴馋,小朋友们等不及将糖果发完,会在得到糖果后边吃边发,每个小朋友从接受糖果到吃完糖果需要 m 秒的时间。 那么,如果第一秒 C 小朋友

六级不考550+不改名 1844

利用OrthoFinder做泛基因家族聚类分析

这条命令会将 Arabidopsis_thaliana.TAIR10.59_longest_trans.pep.fa 文件中的所有序列ID,去掉ID中的空格后面的部分,只保留 > 后第一个空格之前的基因ID,并将结果保存在 An1.fasta 文件中。muscle 是一种常用的多序列比对工具,用于基因组或蛋白质序列的比对。基因家族(Gene family),是来源于同一个祖先,由一个基因通过基因重复而产生两个或更多的拷贝而构成的一组基因,它们在结构和功能上具有明显的相似性,编码相似的蛋白质产物。

qq_64400864的博客 2747

安卓光速虚拟机ADB调试实战:从密钥配置到设备连接

本文详细介绍了在安卓光速虚拟机中进行ADB调试的完整实战流程。核心在于通过密钥配置解决设备未授权问题,并启用网络调试与端口映射,最终实现电脑与虚拟机的稳定连接。文章提供了从原理理解、脚本修改到实战命令和疑难排查的全方位指南,帮助开发者和爱好者高效利用光速虚拟机作为移动测试沙盒。

CAT789的专栏 554

分糖果(candy)

题目描述 童年的我们,将和朋友分享美好的事物作为自己的快乐。这天,C小朋友得到了Plenty of candies,将要把这些糖果分给要好的朋友们。已知糖果从一个人传给另一个人需要1 秒的时间,同一个小朋友不会重复接受糖果。由于糖果足够多,如果某时刻某小朋友接受了糖果,他会将糖果分成若干份,分给那些在他身旁且还没有得到糖果的小朋友们,而且自己会吃一些糖果。由于嘴馋,小朋友们等不及将糖果发完,会在得到糖果后边吃边发。每个小朋友从接受糖果到吃完糖果需要m秒的时间。那么,如果第一秒C小朋友开始发糖,第多少秒所有

Shimmer_ocean的博客 1938

气象大模型光伏功率预测中的应用:从短期,超短期,中长期的实现与开源代码详解

本文详细介绍了基于大模型的光伏功率预测方法,涵盖超短期(15分钟-1小时)、短期(1-6小时)和中长期(1天-1周)预测。文章首先讨论了数据准备与预处理,包括历史功率、气象、天文和电站特性数据的收集与特征工程。随后,针对不同预测需求,提出了多种深度学习模型:超短期预测采用1DCNN-LSTM混合模型,短期预测使用Transformer模型,中长期预测则通过多尺度特征提取模型和概率预测方法处理不确定性。文章还提供了模型训练、评估、部署和优化的完整流程,并开源了代码实现。未来研究方向包括结合数值天气预报、开发时

专注AI大模型,软件混淆,授权 1569

135. 分发糖果(贪心算法)

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

女神药大 1009

SCADA|用KingSCADA实现设备台账的查询功能

以上为用KingSCADA实现设备台账的查询功能,另外还有一些细节功能,比如当点击增加按钮时弹出的信息窗口内的信息希望是在选中的某行信息,只要找到差不多的设备,修改个别参数即可,避免增加时弹出空白页,所有信息都需要填写。以上为实现设备台账查询的最简单实现,实际项目中可能会更复杂,你做过哪些设备台账或相关的功能,有比较好的创意或高难度功能方法,欢迎在留言区评论,或在交流群探讨,互通有无,共同进步。首先完成界面的组态工作,主要是通过查询按钮,查询SQLServer数据库的设备台账数据,然后填充到报表内。

做有价值的事,积累有价值的笔记! 477

使用Python爬虫抓取政府网站政务信息:公告、通知的自动化抓取与分析

通过结合Requests、BeautifulSoup、Selenium等技术,你能够高效地抓取政府网站的数据,并通过MySQL存储与Pandas分析这些数据。通过自动化手段抓取这些信息,不仅可以提高数据收集的效率,还能够实时获取最新的政务动态,为政策研究、舆情分析等提供宝贵数据。我们将通过Python的Requests、BeautifulSoup、Selenium等工具,结合最新的技术实现一个完整的爬虫系统,帮助你轻松抓取并分析政务信息。通过爬虫,我们可以自动化地从指定网站上抓取公告、新闻、通知等信息。

2201_76125261的博客 1907

【算法】Candy 分发糖果

从左到右遍历,如果rating[i-1]rating[i+1],c[i] =max(c[i], c[i+1]+1),否则c[i]=1,因为此时c已经有值,所以c[]的最小值已经确定,但是在从右向左遍历时,可能会导致c[]受右侧影响,要比之前的要大。在这个数据规模下,对数级的算法应该是勉强可以通过的,而ONN的算法是必然TLE的。

Cui's Blog 720

【雷达成像】基于matlab SAR雷达成像仿真【含Matlab源码 3750期】

SAR雷达成像仿真 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 1081

算法系列——分发糖果(Candy)

题目描述 There are N children standing in a line. Each child is assigned a rating value. You are giving candies to these children subjected to the following requirements: Each child must have at least

BridgeGeorge 1494

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

LeetCode 135. Candy(分发糖果)

LeetCode 135. Candy(分发糖果) 转载于:https://www.cnblogs.com/hglibin/p/10794958.html

weixin_30279751的博客 98

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Golang每日一练(leetDay0045) 克隆图、加油站、分发糖果

133. 克隆图 Clone Graph🌟🌟   134. 加油站 Gas Station🌟🌟   135. 分发糖果 Candy🌟🌟🌟

汉阳Hann's Home 919

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

135. Candy

欢迎fork and star:Nowcoder-Repository-github 135. Candy 题目 There are N children standing in a line. Each child is assigned a rating value. You are giving candies to these children subjected to the fol...

weixin_34115824的博客 97

面试算法-45-分发糖果

n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目。示例 1:输入:ratings = [1,0,2]输出:5解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。

Winn~ 303

Leetcode_135_分发糖果 Candy (Hard)

我们只需要简单的两次遍历即可:把所有孩子的糖果数初始化为 1;先从左往右遍历一遍,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的糖果数加 1;再从右往左遍历一遍,如果左边孩子的评分比右边的高,且左边孩子当前的糖果数不大于右边孩子的糖果数,则左边孩子的糖果数更新为右边孩子的糖果数加 1。通过这两次遍历,分配的糖果就可以满足题目要求了。这里的贪心策略即为,在每次遍历中,只考虑并更新相邻一侧的大小关系。

guye 198

leetcode贪心算法小结

贪心算法主要思想:保证局部最优解,总结果最优 问题类型一 分配问题 T455.Assign Cookies(Easy) 贪心策略:饥饿度最小的孩子最容易吃饱,所以我们按照孩子的饥饿度sort,把大于或者等于这个孩子饥饿度的,且大小最小的饼干给这个孩子。之后取剩下孩子中饥饿度最小的孩子,直到没有满足条件的饼干存在。 T135 Candy(Hard) 贪心策略:确保一个评分高的孩子拿到的糖果比左右两个孩子都多,我们分别从左到右、从右到左进行遍历。第一遍遍历右边的孩子评分低于左边的话,左边孩子的糖果为右边孩子糖

qq_41594515的博客 259

leetcode135分发糖果两种解题思路

leetcode135分发糖果,左右遍历和双指针两种方法

weixin_43477901的博客 849

面试经典 150 题 15 —(数组 / 字符串)— 135. 分发糖果

【代码】面试经典 150 题 15 —(数组 / 字符串)— 135. 分发糖果。

BreezeChasingDrizzle 125

Leetcode—135. 分发糖果【中等】

这里可以利用贪心策略,求局部最优解,然后合并为全局最优解。具体来说,将原问题中相邻孩子的条件划分为左相邻孩子和右相邻孩子两个条件,依次求解出两个条件下每个孩子所需要的最小糖果数。在只考虑左相邻孩子的条件下,如果一个孩子比左边孩子的评分高,要求得到比左边孩子更多的糖果,为了降低总体的糖果数量,分配给这个孩子的最小糖果数是左边孩子的糖果数+1;反之则只分配1个糖果。由于每个孩子得到的糖果数量取决于左相邻的孩子,应该从左向右依次遍历每个孩子。

Atticus的博客 477

代码随想录算法训练营day34 | 1005.K次取反后最大化的数组和 ,134. 加油站,135. 分发糖果

1、比前一个数大,即ratings[i]>ratings[i-1],此时小的在左边,这种情况从前向后遍历。2、比后一个数大,即ratings[i]>ratings[i+1],此时小的在右边,这种情况从后向前遍历。到第 i 天累加剩余油量curSum一旦小于0,起始位置至少要是i+1,因为从i之前开始一定不行。第一次取绝对值最大负数,第二次去绝对值最小非负数。【注意】想清楚局部最优解,不要陷入数组循环的误区。利用了java8的新特性:stream。(按照题意,等于的情况和小于一样处理)

2301_77450803的博客 254

Leetcode 135.分糖果

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

weixin_30487201的博客 85

动态规划-09candy分发糖果java实现

题目描述 老师想给孩子们分发糖果,有N个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 相邻的孩子中,评分高的孩子必须获得更多的糖果。 那么这样下来,老师至少需要准备多少颗糖果呢? 示例1: 输入: [1,0,2] 输出: 5 解释: 你可以分别给这三个孩子分发 2、1、2 颗糖...

WukongGo的博客 407
上一篇: 算法-First Unique Character in a String-字符串中的第一个唯一字符
下一篇: 集合-Collection.SynchronizeMap方法-源码解读
酱油瓶啤酒杯
博客等级 码龄8年 35粉丝 135原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值