leetcode力扣——135.分发糖果

leetcode------135.分发糖果

目录

题目

思路:

代码


题目

要求:

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

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

  • 每个孩子至少分配到 1 个糖果。
  • 相邻两个孩子中,评分更高的那个会获得更多的糖果。

请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目

示例:

思路:

分糖的原则是:

  • 每个孩子至少分配到 1 个糖果。
  • 相邻两个孩子中,评分更高的那个会获得更多的糖果。

可以看出来,一个小朋友分到的糖果数量是由自己的分数和左右的分数决定的。

例如:

小朋友的分数:2,1,3,4,5,2,2,1,3,0

得到的糖果数:2,1,2,3,4,1,2,1,2,1

特殊地:

情况一:

小朋友的分数:2,3,4,5,6

得到的糖果数:1,2,3,4,5

情况二:

小朋友的分数:4,5,6,3,2

得到的糖果数:1,2,3,2,1

可见,比左右的小朋友分数高,就能比ta的糖果多一,如果比左右的评分都高,则取更大的那个。如果比左右分数都低,则得到的糖果数为1。但是这样还是很难判断。

所以,每次单从一个方向看。

  • 从左向右看:设第一个小朋友得到的糖果为1,如果之后的小朋友只要评分高于前一个,则获得的糖果数比前面的小朋友多一个,如果低于前一个,则只得到1个糖果,如下:

小朋友的分数:2,1,3,4,5,2,2,1,3,0

从左向右看: 1,1,2,3,4,1,1,1,2,1

  • 从右向左看:设最后一个小朋友得到的糖果为1,如果之前的小朋友只有评分高于后一个,则获得的糖果数就比后边的小朋友多一个,反之则得到1个糖果,如下:

小朋友的分数:2,1,3,4,5,2,2,1,3,0

从右向左看: 2,1,1,1,2,1,2,1,2,1

每次取高的:

小朋友的分数:2,1,3,4,5,2,2,1,3,0

从左向右看: 1,1,2,3,4,1,1,1,2,1

从右向左看: 2,1,1,1,2,1,2,1,2,1

得到的糖果数:2,1,2,3,4,1,2,1,2,1

则我们需要两个数组用于记录,我这里用 recordLeft 记录从左向右 看得到的糖果数;用recordRight 记录从右向左看得到的糖果数。

结果每次取大就行。

代码

cpp 复制代码
class Solution
{
public:
    int candy(vector<int>& ratings)
    {
        int n = ratings.size();
        if(n == 1)  return 1;
        vector<int> recordLeft(n, 1);
        vector<int> recordRight(n, 1);

        for(int i = 1; i < n ; i++)
        {
            if(ratings[i] > ratings[i - 1])
                recordLeft[i] = recordLeft[i - 1] + 1;
            else
                recordLeft[i] = 1;
        }
        for(int i = n - 2; i >= 0; i--)
        {
            if(ratings[i] > ratings[i + 1])
                recordRight[i] = recordRight[i + 1] + 1;
            else
                recordRight[i] = 1;
        }

        //总和
        int res = 0;
        for(int i = 0; i < n; i++)
            res += max(recordLeft[i], recordRight[i]);
        return res;
    }
};
相关推荐
疯狂打码的少年27 分钟前
【数据结构】树的基本概念与二叉树定义
java·数据结构·笔记·算法
webmote3327 分钟前
用 NVIDIA Nemotron 3 Super + .NET 构建有记忆的多轮对话
后端·算法
Keven_1133 分钟前
算法札记:区分稀疏图与稠密图在经验上的数学计算差异
算法·稠密图·稀疏图
Sagittarius_A*1 小时前
后量子密码|前置基础 03|数字签名运行逻辑:签名签发、核验原理与实际业务应用
算法·信息安全·密码学·数字签名·后量子密码
DBA小马哥1 小时前
向量数据库入门到进阶:Embedding、ANN算法与RAG落地的关键术语
数据库·算法·embedding
Luhui Dev2 小时前
如何在 WorkBuddy 中使用大角几何:从 MCP 接入到 AI 几何作图
人工智能·数学·算法·agent·luhuidev
Smilecoc2 小时前
决策树(五):决策树回归
算法·决策树·回归
小龙报2 小时前
【优选算法】1.搜索插入位置 2.x的平方根
java·c语言·数据结构·c++·python·算法·蓝桥杯
Hi李耶3 小时前
【LeetCode】15.三数之和
java·算法·leetcode
我命由我123453 小时前
四流一致(合同流、业务流、资金流、发票流)
经验分享·学习·职场和发展·求职招聘·职场发展·产品经理·学习方法