笔记89:LeetCode_135_分发糖果

前言:


注:代码随想录中没有很清楚的提起想出方法的思路,只是给出了解决这个问题的大致思路和代码;下面我将介绍一下我的思考过程,并贴出实现代码;


a

a

a

a

思考过程:


思路1:为了可以直观理解,我们将评分数组ratings画成折线图,并举几个样例加深理解

注意1:我们可以发现,如果出现一段评分相同的情况,那么评分相同这一段的中间那些节点可以无脑选择赋值为1;

注意2:对于峰值的赋值,如样例3,需要找到离这个波峰最近的两个波谷,从1开始加直到这个波峰,最终比较谁的值大就选谁,因为每个孩子最少一个糖,所以我们要保证波峰沿着最长的路径下降时,下降到最底下还有1来兜底;

a

a

思路2:所以我们的思路转变为如何通过评分数组 ratings 来得到所有的波峰波谷

  • 知道波谷的位置,我们才知道哪些位置应该直接赋值为1,即所有的波谷可以无脑赋值为1;
  • 知道波峰的位置,我们才能通过波峰的位置,找到该波峰左右两边各一个离这个波峰最近的波谷的位置,然后对比两个波谷谁离波峰最远,就选哪个开始一路上升(+1)来给波峰赋值;即样例3表示的情况;

a

a

思路3:所有的折线情况一共有6种,我们判断这6种情况中哪些位置是波峰,哪些位置是波谷?

注意:元素类型分为三类(图中未给出类型的元素即为第3类元素)

  • 波峰
  • 波谷
  • 既不是波峰,也不是波谷

a

a

思路4:如果我们按照上面的6种情况来写我们的代码,先不说还要考虑开头和结尾的特殊情况,就堪堪这六种情况,我tm都想把键盘砸了;所以不可能从头到尾遍历ratings中所有的元素一次,就可以将每个元素的类别(波峰 / 波谷 / 既不是峰也不是谷)给分清楚;

思路5:所以我们另辟蹊径,还是根据我最上面提供的样例3,如果想给波峰赋值,我们需要在两个方向的波谷同时往波峰出发,对波峰赋值,所以我们可不可以?先走【波谷 --> 波峰】这条路,给波峰赋值;再走【波峰 <--  波谷】对波峰赋值;然后选择最大的那个值作为波峰真正的值?

思路6:那么我们可以将遍历一次改成遍历两次数组ratings,第一次遍历为【从左往右】,第二次遍历为【从右往左】,然后记录两次遍历的值,选择最大的值为该节点的值;

注意:不止是波峰可以这样处理,所有的节点都是这样的处理流程;


a

a

a

a

代码实现:


class Solution {
public:int candy(vector<int>& ratings) {//自己尝试:贪心算法vector<int> result(ratings.size(), 1);//正向遍历:for(int i = 1; i < ratings.size(); i++) {if(ratings[i] > ratings[i - 1]) result[i] = result[i - 1] + 1;}//反向遍历:for(int i = ratings.size() - 2; i >= 0; i--) {if(ratings[i] > ratings[i + 1]) result[i] = max(result[i + 1] + 1, result[i]);}//求总和:int sum = 0;for(int i = 0; i < result.size(); i++) {sum += result[i];}return sum;}
};

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

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

相关文章

【实际项目精选源码】ehr人力资源管理系统实现案例(java,vue)

一、项目介绍 一款全源码可二开&#xff0c;可基于云部署、私有部署的企业级数字化人力资源管理系统&#xff0c;涵盖了招聘、人事、考勤、绩效、社保、酬薪六大模块&#xff0c;解决了从人事招聘到酬薪计算的全周期人力资源管理&#xff0c;符合当下大中小型企业组织架构管理运…

docker-compose Install homer

homer前言 一个非常简单的静态主页,为您的服务器保持您的服务在手,从一个简单的yaml配置文件。 前提要求 安装 docker docker-compose 参考创建一键安装homer 脚本 homer安装位置/homerhomer 脚本位置/homer/assetshomer logo 图标/home/assets/iconshomer 端口80homer 颜色…

运维 之 大文件分片刻录光盘

需求 因有些企业中涉及设备只能通过光盘介质方式拷贝文件&#xff0c;然而采购的单张光盘又不能确保存放下一些较大的文件&#xff0c;所以只能通过分片的方式逐个光盘存储。 Windows处理 1、安装压缩软件&#xff08;自行选择&#xff0c;这里使用WinRAR&#xff09;、Ultr…

HTML静态网页成品作业(HTML+CSS)——企业酒店官网网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…

FuTalk设计周刊-Vol.053

#AI漫谈 热点捕手 1.Midjourney推出新功能Room 用户可在聊天室中一起创作图像 Midjourney最近推出了一个有趣的新功能——Room&#xff0c;为用户提供了一个协作和社交平台&#xff0c;用户可以一起创建和分享图像&#xff0c;并参与实时聊天。Room促进了用户之间的互动和合作…

C语言 | Leetcode C语言题解之第111题二叉树的最小深度

题目&#xff1a; 题解&#xff1a; typedef struct {int val;struct TreeNode *node;struct queNode *next; } queNode;void init(queNode **p, int val, struct TreeNode *node) {(*p) (queNode *)malloc(sizeof(queNode));(*p)->val val;(*p)->node node;(*p)->…

CentOS 7安装alertmanager

说明&#xff1a;本文介绍如何在CentOS 7安装alertmanager&#xff1b; Step1&#xff1a;下载安装包 访问Github仓库&#xff0c;下载对应版本的alertmanager安装包 https://github.com/prometheus/alertmanager/releases 如何查看自己系统的信息&#xff0c;可参考下图中的…

AI播客下载:The Logan Bartlett Show Podcast(AI创业投资主题)

Logan Bartlett Show Podcast是一个播客&#xff0c;主持人Logan Bartlett与科技界的领导者以及投资者进行对话&#xff0c;讨论他们在运营或投资企业中学到的经验教训&#xff0c;主要集中在科技创投领域。 Logan Bartlett 是 Redpoint Ventures 的投资人&#xff0c;并且在该…

【DZ模板】克米设计APP手机版本地化+完美使用

模版介绍 【DZ模板】价值288克米设计APP手机版DZ模板 数据本地化完美使用 腾讯官方出品discuz论坛DIY的后台设置&#xff0c;功能齐全&#xff0c;论坛功能不亚于葫芦侠&#xff0c;自定义马甲&#xff0c;自定义认证&#xff0c;自定义广告&#xff0c;完全可以打造出自己想…

SW 弯曲找方向

当旋转弯曲轴的时候,半径和角度 越和理论的接近,越接近(只要输入角度,然后旋转弯曲轴,看半径跟随的变化值)

2024Spring> HNU-计算机系统-实验4-Buflab-导引+验收

前言 称不上导引了&#xff0c;因为验收已经结束了。主要是最近比较忙&#xff0c;在准备期末考试。周五晚上才开始看实验&#xff0c;自己跟着做了一遍实验&#xff0c;感觉难度还是比bomblab要低的&#xff0c;但是如果用心做的话对于栈帧的理解确实能上几个档次。 实验参考…

基于antd的DatePicker 组件封装业务组件

先看一下我写的目录结构: 依次来看业务代码; (1)RangeTime.tsx import {useState,uesCallback} from react; import {DatePicker} from antd; import {RangePickerProps as AntdRangePickerProps} from antd/es/date-picker; import {Moment} from moment; import type {Ran…

ROCm上来自Transformers的双向编码器表示(BERT)

14.8. 来自Transformers的双向编码器表示&#xff08;BERT&#xff09; — 动手学深度学习 2.0.0 documentation (d2l.ai) 代码 import torch from torch import nn from d2l import torch as d2l#save def get_tokens_and_segments(tokens_a, tokens_bNone):""&qu…

rk3568_atomic

文章目录 前言一、atomic是什么?二、原子操作API函数1.atomic原子操作2.原子位操作API三、atomic驱动实验总结前言 本文记录的是正点原子rk3568开发板的atomic实验 一、atomic是什么? 不同的线程在进行读写的过程中,可能会冲突乱入,导致会有预想不到的结果。所以为了让数…

开源模型应用落地-LangSmith试炼-入门初体验-数据集评估(三)

一、前言 LangSmith是一个用于构建生产级 LLM 应用程序的平台&#xff0c;它提供了调试、测试、评估和监控基于任何 LLM 框架构建的链和智能代理的功能&#xff0c;并能与LangChain无缝集成。通过使用LangSmith帮助开发者深入了解模型在不同场景下的表现&#xff0c;让开发者能…

webshell工具-冰蝎流量特征和加密方式

一、冰蝎原理 1.1 简介 冰蝎是一款基于Java开发的动态加密通信流量的新型Webshell客户端&#xff0c;由于通信流量被加密&#xff0c;传统的WAF、IDS 设备难以检测&#xff0c;给威胁狩猎带来较大挑战。冰蝎其最大特点就是对交互流量进行对称加密&#xff0c;且加密密钥是由随…

基于Ruoyi-Cloud-Plus重构黑马项目-学成在线

文章目录 一、系统介绍二、系统架构图三、参考教程四、演示图例机构端运营端用户端开发端 一、系统介绍 毕设&#xff1a;基于主流微服务技术栈的在线教育系统的设计与实现 前端仓库&#xff1a;https://github.com/Xiamu-ssr/Dragon-Edu-Vue3 后端仓库&#xff1a;https://g…

【NodeMCU实时天气时钟温湿度项目 9】为项目增加智能配网功能(和风天气版)

今天是第九专题&#xff0c;主要介绍智能配网的方法途径和具体实现。在项目开发和调试阶段&#xff0c;设置 WIFI 连接信息&#xff0c;通常是在项目中修改源程序代码完成的。项目调试完成后&#xff0c;客户应用环境中如何实现WIFI连接信息&#xff08;ssid 和 password&#…

【基础详解】快速入门入门 SQLite数据可

简介 SQLite 是一个开源的嵌入式关系数据库&#xff0c;实现了自给自足的、无服务器的、配置无需的、事务性的 SQL 数据库引擎。它是一个零配置的数据库&#xff0c;这意味着与其他数据库系统不同&#xff0c;比如 MySQL、PostgreSQL 等&#xff0c;SQLite 不需要在系统中设置…

Unity功能——设置Camera,实现玩家被攻击后晃动效果

一、方法说明&#xff1a; 来源&#xff1a;siki学院&#xff1a;Unity项目捕鱼达人&#xff0c;功能学习记录&#xff1b; 效果摘要&#xff1a;通过调整相机移动&#xff0c;视觉感觉玩家面板剧烈晃动&#xff0c;实现被boss攻击时的震动效果。 使用场景说明&#xff1a; …