贪心 135. 分发糖果

news2025/1/18 3:26:38

135. 分发糖果

难度困难1086

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

思路

先理解一下题意,他说是要根据孩子评分给每一个孩子分糖果.每一个孩子至少分配一个糖果,还有一重要的点是,相邻两个孩子评分更高的孩子会获得更多的糖果

意思就是对于一个孩子来说,除了两边,既与左面孩子相邻,也与右边孩子相邻.

所以我们就要一边一边进行考虑

  • 右孩子大于左孩子的情况(需要从前往后遍历)
  • 左孩子大于右孩子的情况(需要从后往前遍历)

但要保证对于每一个孩子来说,他既要比左面糖果多也要比右面糖果多,所以要取最大值.

 

思路总结

  • 从前往后遍历一遍数组,如果该孩子比它左边孩子评分高,就比左边孩子多一个糖果ratings[i]>ratings[i-1] ==> res[i] = res[i-1] +1; 右边孩子比左边孩子糖果多,达到局部最优,最终给所有孩子分完,全局最优
  • 从后往前遍历一边数组,如果该孩子比它右边孩子评分高,就比右边孩子多一个糖果ratings[i]>ratings[i+1] ==> res[i] = res[i+1] +1;左边孩子比右边孩子糖果多,达到局部最优,最终给所有孩子分完,全局最优
  • 对于一个孩子,既要比左面孩子评分高,也比右边孩子评分高,所以要取最大
  • 最后将结果数组res累加即可

第二步和第三步在代码层次可以合起来,因为只有一个孩子,既要比左面孩子评分高,也比右边孩子评分高,才会既要比左边孩子分的糖果多也要比右边孩子分的糖果多,==>res[i] = Math.max(res[i],res[i+1]+1) ; res[i]为已经计算好的了,一个孩子比它左面分高 res[i+1]+1,一个孩子比它右面孩子分高,取最大即可.

class Solution {
    public int candy(int[] ratings) {
        int[] res = new int[ratings.length];
        Arrays.fill(res,1);//每个孩子至少分配到 1 个糖果。
        for(int i =1;i<ratings.length;++i) {
            if(ratings[i]>ratings[i-1]) {//一个孩子比它左面孩子评分高,就多分一个糖果
                res[i] = res[i-1] + 1;
            }
        }
        int sum = 0;
        for(int i =ratings.length-2;i>=0;--i) {
            if(ratings[i]>ratings[i+1]) {//一个孩子比它右面孩子评分高,就多分一个糖果
                //对于一个孩子既要比左边孩子评分高也比右边孩子评分高,所以糖果要比两个都多,所以要取最大==>糖果既要比左面多也比右边多
                res[i] = Math.max(res[i],res[i+1]+1);
            }
        }
        int ans = 0;
        for(int i=0;i<ratings.length;++i) ans += res[i];
        return ans;
    }
}

总结 :

该题需要两个维度进行考虑,先考虑一边,再去考虑另外一边,不能同时考虑,要不都顾不过来.

出现两种维度的情况下,需要先确定好一个维度,在确定另外一个维度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/178167.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uboot启动流程简要版(基于armv7)

uboot启动流程&#xff08;armv7&#xff09; uboot介绍 uboot就是一段引导程序&#xff0c;在加载系统内核之前&#xff0c;完成硬件初始化&#xff0c;内存映射&#xff0c;为后续内核的引导提供一个良好的环境。 uboot是bootloader的一种&#xff0c;全称为universal boot…

二叉树基础oj练习

1.单值二叉树 题目: 力扣https://leetcode.cn/problems/univalued-binary-tree/ 思路: 单值二叉树 root和左右孩子的值相等 左子树是单值二叉树 右子树是单值二叉树 代码: /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeN…

CSS 艺术之心形-彩虹-加载动画

CSS 艺术之心形-彩虹-加载动画&#xff08;居中抖动问题&#xff09;参考描述效果HTMLCSS重置元素的部分默认样式bodyli动画定义指定animationul居中抖动问题代码总汇参考 项目描述搜索引擎BingMDNMDN Web Docs 描述 项目描述Edge109.0.1518.61 (正式版本) (64 位) 效果 HTML…

【Vue笔记】Vue中默认插槽slot、具名插槽slot、自定义组件的v-model属性的使用

这篇文章&#xff0c;主要介绍Vue中默认插槽slot、具名插槽slot、自定义组件的v-model属性的使用。 目录 一、插槽slot介绍 1.1、默认插槽 1.2、具名插槽 &#xff08;1&#xff09;如何定义具名插槽&#xff1f;&#xff1f;&#xff1f; &#xff08;2&#xff09;如何使…

3DMAX纹理插件BerconMaps使用教程

BerconMaps是3dMax的第三方纹理插件。它添加了五个新的3dMax纹理贴图&#xff1a;噪波&#xff08;Noise&#xff09;、木纹&#xff08;Wood&#xff09;、瓷砖&#xff08;Tile&#xff09;、失真&#xff08;Distortion&#xff09;和渐变&#xff08;Gradient&#xff09;。…

linux配置samba服务

文章目录samba服务第一步&#xff1a;下载samba服务第二步&#xff1a;开启服务&#xff0c;查看服务状态第三步&#xff1a;在文件夹系统查看第四步&#xff1a;设置samba的配置文件第五步&#xff1a;再次去尝试连接linux服务共享修改smab服务的配置设置samba服务的用户名和密…

verilog实现计算器设计

该实验为用verilog编写的一个运算系统,其功能是实现4位整数的加、减、乘、除运算。运算时通过矩阵键盘输入运算类型和运算所需要的数据,然后通过内部电路处理,将计算的结果送于数码管或LCD1602显示。 工程截图如下: 本设计分为两个子模块,按键输入和数码管输出。 还有LC…

python字符串

python字符串 文章目录python字符串一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.字符串创建2.转义字符3.运算符4.格式化5.三引号6.内建函数总结一、实验目的 掌握字符串的用法 二、实验原理 字符串 字符串是一种序列&#xff0c;用于表示和存储文本。py…

Ubuntu16.04安装Chrome出错

安装了Ubuntu16.04之后想要装个Chrome&#xff0c;本来觉得是很简单的事情&#xff0c;下载->安装就结束了&#xff0c;结果没想到搞了好久&#xff0c;最后发现是因为自己偷懒所造成的&#xff01;因此&#xff0c;写下这篇博文做警示&#xff0c;如果其他人也碰到这样的问…

20230124使AIO-3568J开发板在Android12下横屏

20230124使AIO-3568J开发板在Android12下横屏 2023/1/24 14:05 百度搜索&#xff1a;RK3568 强制横屏 http://www.360doc.com/content/12/0121/07/29321110_1049371522.shtml RK3568 Android-HDMI旋转屏幕显示 硬件开发板&#xff1a;OK3568-C开发板&#xff08;基于国产瑞芯微…

【Leetcode每日一题】34.在排序数组中查找元素的第一个和最后一个位置|二分求下标

&#x1f331;博主简介&#xff1a;大一计科生&#xff0c;努力学习Java中!热爱写博客~预备程序媛 &#x1f4dc;所属专栏&#xff1a;LeetCode每日一题–进击大厂 ✈往期博文回顾: 【Leetcode每日一题】35.搜素插入位置|二分查找数组下标 &#x1f575;️‍♂️近期目标&#…

恶意代码分析实战 5 分析恶意Windows程序

1 Lab07-01 本次实验分析lab07-01.exe,lab07-02.exe,先来看lab07-01.exe的问题 问题 计算机重启后&#xff0c;这个程序如何确保它继续运行&#xff08;达到持久化驻留&#xff09; 首先&#xff0c;查看导入函数。 OpenSCManagerA和CreateServiceA函数暗示着这个恶意代码…

蓝队-HTTP协议的分析

文章目录应用层的协议→HTTP协议访问地址web网站的正确访问姿势请求协议https访问的密钥文件网站的部署通过https协议访问请求报文响应报文请求方法http头协议cookiesRefererUser-AgentX-Forwarded-ForHTTP 状态码HTTP content-type抓包分析HTTP抓包代理插件的下载代理第一种方…

电商项目之同一笔单多次收款成功

1 问题背景 有个收单系统&#xff08;简称S系统&#xff09;&#xff0c;作用是收单&#xff0c;相当于支付渠道&#xff0c;能够作为第三方服务对接其他支付平台。电商系统&#xff08;简称A系统&#xff09;与S系统是隔离的。A系统发起支付请求给S系统&#xff0c;S系统包装一…

Java高效率复习-坦克大战[Java基础合集]

目录 前言 该文章会从零开始制作一个坦克大战的游戏&#xff0c;该游戏使用Java的AWT和Swing作为窗体和容器&#xff0c;使用面向对象、线程等技术来丰富游戏&#xff0c;本文章相等于Java前期和中期技术的一个合集&#xff08;对于IO、网络、反射并没有涉及到&#xff09;。 …

高级Spring之Bean 生命周期

老样子&#xff0c;话不多说&#xff0c;直接上代码&#xff1a; 准备容器&#xff1a; SpringBootApplication public class A03 {public static void main(String[] args) {ConfigurableApplicationContext context SpringApplication.run(A03.class, args);context.close(…

【价格型需求响应】基于Logistic函数的负荷转移率模型需求响应研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

前端学习——CSS

文章目录1.CSS1.1什么是CSS1.2快速入门1.3.三种CSS导入方式2.选择器2.1基本选择器2.1.1标签选择器2.1.2类选择器2.1.3id选择器2.2层次选择器2.2.1后代选择器2.2.2子选择器2.2.3相邻兄弟选择器2.2.4通用选择器2.3结构伪类选择器2.4属性选择器3.美化网页元素3.1span标签3.2字体样…

swagger测试Restful API

swagger出现背景 我们构建Restful API的目的通常都是由于多终端的原因&#xff0c;这些终端会共用很多底层业务逻辑&#xff0c;因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端&#xff0c;不同端由不同的团队或者小组负责&#xff0c;为了减少与其他团队平时开发…

LabVIEW将台式电脑转换为 Phar Lap ETS 实时目标

LabVIEW将台式电脑转换为 Phar Lap ETS 实时目标注意&#xff1a;NI将在NI2020软件版本中删除对cRIO的Pharlap和NI2022软件版本中对PXI的支持。更多信息&#xff0c;请参阅PharLapRTOSEOL路线图。您可能已经拥有一台台式PC&#xff0c;可以作为下一个可靠的确定性测试或控制系统…