当前位置: 首页 > article >正文

力扣 —— 分发糖果

分发糖果

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

思路

  1. 第一个for循环逻辑(只看左边):看我 比左边的小朋友的分是否要高 ,如果我比他高那么我就比他多一颗糖果。否则我得到一颗糖果。
  2. 第二个for循环逻辑(只看右边):看我 比右边的小朋友的分是否要高 ,如果我比他高那么我就要比他多一颗糖果。注意,此时需要判断根据第一步骤所得糖果和目前哪个多,取最大值。
  • 例子:

    One: [1,3,4,5,2]

    • 只看左边结果:[1,2,3,4,1]
    • 只看右边结果:[1,2,3,4,1]

    Two: [1,3,2,2,1]

    • 只看左边结果:[1,2,1,1,1]
    • 只看右边结果:[1,2,1,2,1]

答案

class Solution {
    public int candy(int[] ratings) {
        int len = ratings.length;
        int[] candyArr = new int[len];
        candyArr[0] = 1;
        // 只看左边
        for (int i = 1; i < len; i++) {
            if (ratings[i] > ratings[i - 1]) {
                candyArr[i] = candyArr[i - 1] + 1;
            } else {
                candyArr[i] = 1;
            }
        }
        // 再看右边
        for (int j = len - 2; j >= 0; j--) {
            if (ratings[j] > ratings[j + 1]) {
                candyArr[j] = Math.max(candyArr[j], (candyArr[j + 1] + 1));
            }
        }
        int sum = 0;
        for (int k = 0; k < len; k++) {
            sum += candyArr[k];
        }
        return sum;
    }
}

http://www.kler.cn/news/363842.html

相关文章:

  • Python内置函数classmethod()详解
  • MoCoOp: Mixture of Prompt Learning for Vision Language Models
  • 有效三角形的个数---双指针法
  • 【华为HCIP实战课程十八】OSPF的外部路由类型,网络工程师
  • 麒麟V10、UOS系统实现在线合并多个Word文件
  • java 大集合切分成一个集合中有多个小集合
  • Vue中app.config.globalPropertiesVue.prototype和getCurrentInstance的使用
  • 机器视觉相机自动对焦算法
  • spark on kubernetes运行测试
  • Linux之例行性工作
  • 管道与共享内存
  • 【Go语言】语法基础之变量、数据类型详解
  • perl双引号内字符串的反斜线转义
  • 【Linux系统】Linux系统习题整理
  • zsh: command not found: nvm 问题(Mac)
  • 得物iOS函数调用栈及符号化调优实践|得物技术
  • 【前端布局 如何适配不同分辨率 vue2】
  • 12、论文阅读:利用生成对抗网络实现无监督深度图像增强
  • 【Java】多线程-线程创建的两种方式【主线学习笔记】
  • 在vue中key的原理是什么,有什么作用
  • 《Vue.js 组件开发秘籍:从基础到高级》
  • CTFHUB技能树之文件上传——无验证
  • sql-labs靶场第十六关测试报告
  • 一款精美的导航引导页html源码
  • STM32 从0开始系统学习 1
  • 从0开始深度学习(20)——延后初始化和自定义层