分发糖果问题

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

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

每个孩子至少分配到 1 个糖果。

相邻两个孩子评分更高的孩子会获得更多的糖果。

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

示例 1:

输入:ratings = [1,0,2]

输出:5

解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。

示例 2:

输入:ratings = [1,2,2]

输出:4

解释:你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。

第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。

js 复制代码
/**
 * @param {number[]} ratings
 * @return {number}
 */
const candy = function (ratings) {
    let ret = 1; // 总糖果数量
    let inc = 1; // 最近的递增序列的长度
    let dec = 0; // 当前递减序列的长度
    let pre = 1; // 前一个同学分得的糖果数量

    for (let i = 1; i < ratings.length; i++) {
        if (ratings[i] >= ratings[i - 1]) {
            dec = 0;
            if (ratings[i] === ratings[i - 1]) pre = 1;
            else pre++;
            ret += pre;
            inc = pre;
        } else {
            dec++;
            if (dec === inc) {
                dec++;
            }
            ret += dec;
            pre = 1;
        }
    }
    return ret;
};
相关推荐
田梓燊24 分钟前
图论 八字码
c++·算法·图论
苦 涩35 分钟前
考研408笔记之数据结构(六)——查找
数据结构
Tanecious.1 小时前
C语言--数据在内存中的存储
c语言·开发语言·算法
Bran_Liu1 小时前
【LeetCode 刷题】栈与队列-队列的应用
数据结构·python·算法·leetcode
kcarly2 小时前
知识图谱都有哪些常见算法
人工智能·算法·知识图谱
努力搬砖的程序媛儿2 小时前
uniapp广告飘窗
前端·javascript·uni-app
CM莫问2 小时前
<论文>用于大语言模型去偏的因果奖励机制
人工智能·深度学习·算法·语言模型·自然语言处理
程序猿零零漆2 小时前
《从入门到精通:蓝桥杯编程大赛知识点全攻略》(五)-数的三次方根、机器人跳跃问题、四平方和
java·算法·蓝桥杯
苦 涩2 小时前
考研408笔记之数据结构(五)——图
数据结构·笔记·考研
大大。2 小时前
element el-table合并单元格
前端·javascript·vue.js