分发糖果问题

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;
};
相关推荐
peachSoda72 分钟前
自定义配置小程序tabbar逻辑思路
javascript·vue.js·微信小程序·小程序
hbqjzx2 分钟前
记录一个自动学习的脚本开发过程
开发语言·javascript·学习
浪裡遊8 分钟前
React开发模式解析:JSX语法与生命周期管理
前端·javascript·react.js·前端框架·ecmascript
fruge11 分钟前
Vue 3 完全指南:响应式原理、组合式 API 与实战优化
javascript·vue.js·ecmascript
PyHaVolask17 分钟前
数据结构与算法分析
数据结构·算法·图论
小王C语言17 分钟前
封装红黑树实现mymap和myset
linux·服务器·算法
Aoda24 分钟前
从痛点到落地:PawHaven 的 Monorepo 架构设计
前端·javascript
幸运小圣26 分钟前
Set数据结构【ES6】
javascript·数据结构·es6
zxg_神说要有光35 分钟前
我好像找到了最适合我的生活状态
前端·javascript
大佬,救命!!!36 分钟前
算法实现迭代2_堆排序
数据结构·python·算法·学习笔记·堆排序