(贪心) LeetCode 135. 分发糖果

原题链接

一. 题目描述

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 <= ratingsi <= 2 * 104

二. 解题思路

本题题意也是比较清楚,给每一个孩子分配糖果,至少一颗,每个孩子的左侧或者右侧的孩子的评分如果比相邻的孩子高则分到的糖果的数量也多。问满足条件分到的最少的糖果总数;

我们首先定义一个关于每一个孩子分到糖果数量的vector 数组,然后我们就得考虑怎样分配糖果才能使得每一个孩子的左右侧都满足,如果你想同时满足两侧显然是不可能的,所以我i们分为两步执行,先满足右侧,再倒着执行一次,满足左侧的孩子。

如下图所示,我们先从左到右遍历一遍,如果当前的大于左侧的,就在左侧的位置上加1作为当前分配的糖果数量,否则直接分配1。

再从右往左比较右孩子的大小,如果当前位置的大于右侧孩子就将当前位置的糖果和右侧孩子的糖果加1 取一个最大值即可。

最后只需要遍历一遍将结果累加输出即可。

话不多说!!!上代码!!

三. 代码

cpp 复制代码
class Solution {
public:
    int candy(vector<int>& ratings) {
        int n = ratings.size();
        vector<int> candy(n);
        candy[0] = 1;
        for(int i = 1; i < n; i++){  // 从左到右开始遍历
            if(ratings[i] > ratings[i - 1]){
                candy[i] = candy[i - 1] + 1;
            }else{
                candy[i] = 1;
            }
        }
        // candy[n - 1] = 1;
        for(int i = n - 2; i >= 0; i--){        // 从右往左开始遍历
            if(ratings[i] > ratings[i + 1]){
                candy[i] = max(candy[i], candy[i + 1] + 1);
            }
        }
        int res = 0;
        for(int i = 0; i < n; i++){
            res += candy[i];
        }
        return res;
    }
};

四. 总结

本题理解起来很简单,但是真正做起来并不简单,需要将思路梳理好,只要多做就能理解,加油!!!

时间复杂度:O(n);

空间复杂度:O(n)。

喜欢的话给个关注吧!!

相关推荐
Omics Pro15 分钟前
Cell封面|衰老生物学开源AI工具包
数据库·人工智能·算法·机器学习·自然语言处理
释厄6232 小时前
多黑洞具现论·物理/生物/金融三域显化·虚拟宇宙黑洞·奇点=0 圆圈
开发语言·数据结构·人工智能·程序人生·安全威胁分析
UIU1143 小时前
递归算法与汉诺塔
c++·学习·算法·c#·递归
Fruit_Caller3 小时前
static
开发语言·c++
用户979984807188 小时前
200 行代码写一个能跑的 AI Agent:不依赖任何框架,只靠 tool-calling 原理
算法
threerocks8 小时前
【Muse实战】X 流量作战室搭建保姆级教程 - 拥有你自己的运营团队
算法
GreenTea8 小时前
深度拆解 ScienceBuddy:如何用“双层递归自进化”构建高可靠科研 Agent Harness
前端·后端·算法
花椒技术8 小时前
2.46 秒生成 5 秒视频:拆解 H3 Max 的模型、推理栈与硬件协同
算法·音视频开发·视频编码
vivo互联网技术8 小时前
ART:妆容迁移框架,重新定义高保真妆容迁移 | ECCV 2026
人工智能·算法·图像识别
用户0441440924498 小时前
卫星信号模拟器里的四个坐标转换公式
算法