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 *
  • 0 <= ratings[i] <= 2 *

思路:

本题可采用贪心思路确定每个孩子的糖果数。

先从左向右比,最左边的孩子的糖果数为 1,如果右边的孩子的评分高于左边的孩子则给右边孩子的糖果数为左孩子的糖果数+1,若右边的孩子评分不高于左边的孩子,则给一个糖果。这样会让比左边的孩子评分高的孩子得到更多的糖果。此时也初步形成了当前糖果分配数组 candyNums 。

再从右往左比,如果左边的孩子的评分高于右边的孩子的评分,则 左边的孩子所分得的糖果数为 当前糖果数(用于保底,如果 右边的孩子的糖果数+1< 当前糖果数,则当前糖果数不变,这时可以满足之前从左往右比确定的条件,又可以满足大于右边孩子糖果数的条件)右边的孩子的糖果数+1(保证左边的孩子的糖果大于右边的孩子) 两者之间的最大值(此时既满足从左往右确定的条件,又满足从右往左确定的条件)。

代码:

复制代码
class Solution {
    public int candy(int[] ratings) {
        int len = ratings.length;
        int[] candyNums = new int[len];
        candyNums[0]=1;
        for(int i=1;i<len;i++){
            if(ratings[i]>ratings[i-1]){
                //从左往右比,如果右边的孩子评分高于左边的孩子,则右边的孩子糖果数比左边的孩子多一个
                candyNums[i]=candyNums[i-1]+1;
            }
            else{
                //否则给一个糖果
                candyNums[i]=1;
            }
        }
        //从右往左比,如果左边的孩子评分高于右边的孩子,则左边的孩子分得的糖果数为
        //当前糖果数与右边孩子糖果数+1 两者之间的最大值(为了保证比左右孩子都评分高的孩子的糖果数比左右孩子都多)
        for(int i=len-2;i>=0;i--){
            if(ratings[i]>ratings[i+1]){
                candyNums[i] = Math.max(candyNums[i],candyNums[i+1]+1);
            }
        }
        int ans = 0;
        for(int x:candyNums){
            ans += x;
        }
        return ans;
    }
}

参考:代码随想录

相关推荐
我不是QI43 分钟前
DES 加密算法:核心组件、加解密流程与安全特性
经验分享·算法·安全·网络安全·密码学
前端小刘哥1 小时前
新版视频直播点播EasyDSS平台,让跨团队沟通高效又顺畅
算法
明月(Alioo)2 小时前
机器学习入门,无监督学习之K-Means聚类算法完全指南:面向Java开发者的Python实现详解
python·算法·机器学习
叶梅树2 小时前
从零构建A股量化交易工具:基于Qlib的全栈系统指南
前端·后端·算法
lingran__2 小时前
算法沉淀第三天(统计二进制中1的个数 两个整数二进制位不同个数)
c++·算法
MicroTech20252 小时前
微算法科技MLGO推出隐私感知联合DNN模型部署和分区优化技术,开启协作边缘推理新时代
科技·算法·dnn
小冯记录编程3 小时前
深入解析C++ for循环原理
开发语言·c++·算法
chenchihwen4 小时前
深度解析RAG系统中的PDF解析模块:Docling集成与并行处理实践
python·算法·pdf
做科研的周师兄5 小时前
【机器学习入门】7.4 随机森林:一文吃透随机森林——从原理到核心特点
人工智能·学习·算法·随机森林·机器学习·支持向量机·数据挖掘
Sunsets_Red6 小时前
差分操作正确性证明
java·c语言·c++·python·算法·c#