leetcode 135: 分发糖果

Java实现 LeetCode 575 分糖果(看看是你的长度小还是我的种类少) 575. 分糖果 给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。 示例 1: 输入: candies = [1,1,2,2,3,3] 输出: 3 解析: 一共有三种种类的糖果,每一种都有两个。 最优分配方案:妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的种类... 阅读详情

题目描述:
n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。

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

每个孩子至少分配到 1 个糖果。
相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

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

示例 2:
输入:ratings = [1,2,2]
输出:4
解释:你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。
第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。

提示:
n == ratings.length
1 <= n <= 2 * 104
0 <= ratings[i] <= 2 * 104

思路1:
贪心
从左右两个方向进行遍历,按照比前一个大就+1,否则就是1的原则。
最后取两次遍历的最大值即可。
主要思路参考链接:
链接1
链接2

class Solution:
    def candy(self, ratings: List[int]) -> int:
        left = [1] * len(ratings)
        right = [1] * len(ratings)
        res = 0
        for i in range(1, len(ratings)):
            if ratings[i] > ratings[i-1]:
                left[i] = left[i-1] + 1
        for j in range(len(ratings)-2, -1, -1):
            if ratings[j] > ratings[j+1]:
                right[j] = right[j+1] + 1
        for k in range(len(ratings)):
            res += max(left[k], right[k])
        return res

时间复杂度O(n),空间复杂度O(n)。

思路2:
降低时间复杂度,如果要求空间复杂度是O(1)。
主要参考了链接1的思路2:从左向右遍历一遍,如果大于前一个就+1,相等就是1,小于的话,记录当前递减的长度,再递减的时候,增加递减的长度的数量的糖果,这样就保证递减部分是满足要求的,但同时也要注意,当递减的长度和前面增的部分的糖果数量相同时,前面最后一个增的位置的糖果量需要加1,否则不满足要求。

class Solution:
    def candy(self, ratings: List[int]) -> int:
        res = 1
        pre, dec, inc = 1, 0, 1
        for i in range(1, len(ratings)):
            if ratings[i] >= ratings[i-1]:
                dec = 0
                if ratings[i] == ratings[i-1]:
                    pre = 1
                else:
                    pre += 1
                res += pre
                inc = pre
            else:
                dec += 1
                if dec == inc:
                    dec += 1
                res += dec
                pre = 1
        return res
leetcode 135. Candy | 135. 分发糖果(原创图文详解,Java) 题目 https://leetcode.com/problems/candy/ 题解 思路 首先,根据题意,这是一个分糖果问题。本题需要满足两个条件: 每个孩子至少有一个糖果 rating 值较大的孩子,得到的糖果也较多(rating 值相等时随意) 通过分析可以发现,rating 值 本质上在确定 前后孩子 分到的糖果的 大小关系,也就是确定了前后之间的 单调性。而具体分到多少糖 阅读详情

相关推荐

【困难】力扣算法题解析LeetCode135:分发糖果

题目要求为一排孩子分发糖果,满足每个孩子至少1颗糖,且相邻孩子中评分更高的必须获得更多糖果。通过两次遍历(左到右和右到左)确保同时满足左右相邻规则,最终计算最少糖果数。Java实现中初始化每人1颗糖,先处理左规则(若右孩子评分更高则糖果数+1),再处理右规则(取左右规则中的较大值)。时间复杂度O(n),空间复杂度O(n)。示例输入[1,0,2]输出5,[1,2,2]输出4。完整代码及调试信息可点击底部名片获取。

ylumwd的博客 387

Leetcode每日一题——134.分发糖果

Leetcode每日一题——134.分发糖果。贪心算法

weixin_52709752的博客 815

ChatBI告别“NL2SQL依赖症”!从准确率50%到90%,3大技术路线+4个企业案例拆解核心玩法

摘要: ChatBI通过自然语言交互实现数据民主化,其核心是“语义理解+数据执行+知识沉淀”的全链路能力,而非单一的NL2SQL技术。行业采用三大技术路线提升准确率:专有知识库(提升30%)、指标标签语义层(准确率85%)、JSON中间层(多轮对话提升25%)。数据执行方案包括NL2SQL、NL2API等,需结合场景选择。企业落地需解决四大痛点:跨表查询准确率低(引入拓扑图)、模糊查询(用户干预机制)、响应慢(预计算缓存)、多轮对话(上下文池)。Spring AI Alibaba提供轻量级集成方案,助力企业

weixin_52610848的博客 1655

LeetCode 135.分发糖果

n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果:

qq_53332052的博客 598

27、振动信号实时并行处理与风力发电机模型鲁棒控制设计

本文探讨了振动信号实时并行处理与风力发电机模型鲁棒控制设计两大核心技术。在振动信号处理方面,提出基于FPGA、RT和PC三级架构的并行采集与处理系统,实现高效、实时的振动分析,适用于电机状态监测与预测性维护。在风力发电控制方面,研究风力农场布局优化(WFLO)问题,比较九种多目标元启发式算法性能,并提出基于扰动观察法的最大功率点跟踪(MPPT)控制策略,提升发电效率与系统鲁棒性。研究成果为工业设备智能监控与可再生能源优化提供了有效技术路径。

sunny的博客 72

一文看懂EMMC原理及工作过程

CMD:用于设备初始化和命令传输的双向通道, CMD信号有2种工作模式:1#:漏极开路--->用于初始化模式2#:推拉--->用于快速命令传输其中命令从eMMC主机控制器发送到eMMC设备,响应从设备发送到主机。DAT [7:0]:双向数据信号,模式包括:1(DAT0);默认情况下,通电或重置后,只有DAT0用于数据传输。DAT信号在推挽模式下工作,eMMC设备包括数据线DAT1-DAT7的内部上拉。进入4位模式后,设备立即断开线路DAT1、DAT2和DAT3的内部上拉;

Airer_00的博客 2033

Leetcode(135)——分发糖果

分发糖果

KCDCY的博客 1817

机器人环境仿真软件:Gazebo_(6).传感器仿真

通过 Gazebo 和 ROS,我们可以方便地配置和使用多种传感器,进行机器人环境的仿真和调试。传感器仿真不仅帮助我们验证和测试机器人的感知能力,还可以在真实部署前发现和解决潜在的问题。本节详细介绍了如何在 Gazebo 中配置激光雷达、摄像头、IMU、声纳和 GPS 传感器,并展示了如何在 ROS 中接收和处理这些传感器数据。此外,还介绍了多传感器融合的基本方法和调试工具,希望这些内容能对你的机器人仿真工作有所帮助。

kkchenjj的博客 1388

LeetCode135 && LeetCode1103:分发糖果

博主将 LeetCode135 和 LeetCode1103 两道题放在一起,虽然都是分糖果,但是思路却完全不一样。仅供借鉴。 目录 一、题目 二、示例 三、思路 四、代码 一、题目 LeetCode135:分发糖果 老师想给孩子们分发糖果,有 N个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。 那么这样下来,老师至少需要准备多少颗.

D77的博客 416

【图像超分】论文复现:轻量化超分 | 残差特征蒸馏网络RFDN的Pytorch源码复现,跑通源码,整合到EDSR-PyTorch中进行训练,补充CCA的实现!

本文介绍了将RFDN(残差特征蒸馏网络)整合到EDSR-PyTorch框架中的实现过程。主要内容包括:1)环境配置与数据集准备;2)测试源码提供的x4预训练模型,并通过修改图像裁剪函数解决HR与SR尺寸不一致问题;3)训练过程详解,包括将RFDN源码模块整合到EDSR框架中,调整模型参数输入方式。文章还提供了完整的代码实现、训练好的模型权重下载链接,并对RFDN架构进行了详细拆解与注释。通过将RFDN与EDSR相结合,实现了轻量级图像超分辨率重建,获得了PSNR/SSIM等指标及可视化结果。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 432

基于STM32、HAL库的ADE7880ACPZ-RL电能计量芯片驱动程序设计

@retval 状态 (ADE7880_OK或ADE7880_ERROR)* @retval 状态 (ADE7880_OK或ADE7880_ERROR)* @retval 状态 (ADE7880_OK或ADE7880_ERROR)* @retval 状态 (ADE7880_OK或ADE7880_ERROR)* @retval 状态 (ADE7880_OK或ADE7880_ERROR)PA6 (MISO) <--> SDO (SPI数据输出)PB0 (CS) <--> /CS (片选,低有效)

corlin6688的博客 668

力扣LeetCode:135. 分发糖果(贪心算法)

你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。请你给每个孩子分发糖果,计算并返回需要准备的。表示每个孩子的评分。

欢迎访问我的个人Blog网站:blog.homeryland.org 307

YOLO26改进策略【YOLO和Mamba】| CVPR 2025:EfficientViM 压缩隐藏状态空间进行通道混合、单头设计减少内存操作,提升目标检测效率与精度

本文记录的是利用模块优化的目标检测网络模型。EfficientViM Block(基于隐藏状态混合器的状态空间对偶性模块) 的设计旨在,提升特征提取效率,同时兼顾全局依赖捕捉与局部细节保留。本文将深入研究的原理,并将其应用到中,通过重构特征提取流程、减少内存绑定操作、融合多阶段特征,增强模型在资源受限环境下的检测性能与速度。EfficientViM: Efficient Vision Mamba with Hidden State Mixer based State Space DualityEfficie

Limiiiing的博客 399

【算法】贪心算法:LeetCode 135 分发糖果 、LeetCode 860 柠檬水找零

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

Zhou_LC的博客 642

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

力扣135:分发糖果问题解析

关键在于理解题目中的两个条件:每个孩子至少一个糖果,评分更高的孩子必须比相邻孩子获得更多糖果。需要同时考虑左右两侧的邻居,因此需要两次遍历。这个问题要求根据孩子的评分分配糖果,每个孩子至少分到一个糖果,评分更高的孩子必须比相邻孩子获得更多糖果。目标是找到满足条件的最小糖果总数。采用贪心算法,分别从左到右和从右到左遍历数组。第一次遍历确保右边评分更高的孩子比左边多,第二次遍历确保左边评分更高的孩子比右边多。

yVR_6670的博客 189

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

力扣--135:分发糖果

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

Better_WZQ的博客 553

WINCC7.3破解文件

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

LeetCode:135.分发糖果

LeetCode:135.分发糖果

xiaoshiguang3的博客 624

leetcode135:分发糖果

我们需要解决的题目是一个典型的。

D2510466299的博客 1103

LeetCode第135题:分发糖果

LeetCode第135题的要求是分发糖果,给孩子们分配糖果,满足条件是:每个孩子至少一个糖果,评分高的孩子比旁边的孩子多分糖果。这样就能满足题目的条件并找到最小的糖果分配数量。

byteinit的专栏 338

Leetcode: NO.135 分发糖果

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

泛泛之素 382

【每日一题】力扣135:分发糖果

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

Josvin 527

leetcode:135. 分发糖果

题目来源 leetcode:candy 题目描述 题目解析 贪心 在样例中,我们初始化糖果分配为 [1,1,1],第一次遍历更新后的结果为 [1,1,2],第二次遍历更新后的结果为 [2,1,2]。 动态规划 思路 class Solution { public: int candy(vector<int>& ratings) { int n = ratings.size(); if(n == 0){ return

OceanStar的博客 256

leetcode-135:分发糖果

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

菊头蝙蝠的博客 389

LeetCode 135:分发糖果

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

hselenium的博客 158

LeetCode 135.分发糖果:双向遍历下的贪心策略应用

有n个孩子站成一排,每个孩子都有一个评分ratings。每个孩子至少分配到 1 个糖果。相邻两个孩子中,评分高的孩子必须获得更多的糖果。要求返回最少需要的糖果总数。本题通过分阶段处理双向约束识别问题中的双向约束(如本题中"左高右低"和"右高左低"两种情况)分两次遍历,每次处理一个方向的约束,确保被比较方的状态已确定合并两次遍历的结果,取满足所有约束的最小值这种思路的核心是将复杂的全局约束分解为可分步处理的局部约束,通过贪心策略实现高效求解。

Musennn的博客 980
上一篇: leetcode 93: 复原IP地址 (面试常考)
下一篇: 需要背下来的编程题目:
coding_diamond
博客等级 码龄8年 8粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值