(贪心) 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 * 104
0 <= ratings[i] <= 2 * 104

二. 解题思路

本题题意也是比较清楚,给每一个孩子分配糖果,至少一颗,每个孩子的左侧或者右侧的孩子的评分如果比相邻的孩子高则分到的糖果的数量也多。问满足条件分到的最少的糖果总数;

我们首先定义一个关于每一个孩子分到糖果数量的vector 数组,然后我们就得考虑怎样分配糖果才能使得每一个孩子的左右侧都满足,如果你想同时满足两侧显然是不可能的,所以我i们分为两步执行,先满足右侧,再倒着执行一次,满足左侧的孩子。

如下图所示,我们先从左到右遍历一遍,如果当前的大于左侧的,就在左侧的位置上加1作为当前分配的糖果数量,否则直接分配1。

再从右往左比较右孩子的大小,如果当前位置的大于右侧孩子就将当前位置的糖果和右侧孩子的糖果加1 取一个最大值即可。

最后只需要遍历一遍将结果累加输出即可。

话不多说!!!上代码!!

三. 代码

class Solution {
public:int candy(vector<int>& ratings) {int n = ratings.size();vector<int> candy(n);candy[0] = 1;for(int i = 1; i < n; i++){  // 从左到右开始遍历if(ratings[i] > ratings[i - 1]){candy[i] = candy[i - 1] + 1;}else{candy[i] = 1;}}// candy[n - 1] = 1;for(int i = n - 2; i >= 0; i--){        // 从右往左开始遍历if(ratings[i] > ratings[i + 1]){candy[i] = max(candy[i], candy[i + 1] + 1);}}int res = 0;for(int i = 0; i < n; i++){res += candy[i];}return res;}
};

四. 总结

本题理解起来很简单,但是真正做起来并不简单,需要将思路梳理好,只要多做就能理解,加油!!!

时间复杂度:O(n);

空间复杂度:O(n)。

喜欢的话给个关注吧!!

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

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

相关文章

rapidjson的移植

因为rapidjson是只有头文件 使用模板来实现json 所以只需要添加头文件就行 make使用-I/路径指定头文件 解压后编写makefile 下载地址 https://github.com/Tencent/rapidjson https://github.com/Tencent/rapidjson/releases/tag/v1.1.0 下载了版本 rapidjson-1.1.0.zip 使用…

OpenCV与AI深度学习 | 基于改进YOLOv8的景区行人检测算法

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;基于改进YOLOv8的景区行人检测算法 作者&#xff1a;贵向泉&#xff0c;刘世清&#xff0c;李立等 来源&#xff1a;《计算机工程》期刊 编…

docker应用

打包传输 1.将镜像打包 #查看帮助文件 docker --help #找到save&#xff0c;可以将镜像保存为一个tar包 docker save --help #查看save使用方式 #查看现有的镜像 docker images # docker save --output centos.tar centos:latest ls ...centos.tar... 可以将tar发送给其他用户…

若依如何添加测试单元

一、引入依赖 在ruoyi-admin的pom文件中加入以下依赖&#xff0c;此处为什么不需要写版本号&#xff1f;SpringBoot版本中有对应的默认版本&#xff0c;可以防止新手小白乱写版本后引发冲突。 <dependency><groupId>org.springframework.boot</groupId><…

class_4:条件语句和逻辑运算符

mood_index int(input("对象今天的心情怎么样&#xff01;"))if mood_index > 80:print("今天可以好好happy一下了")print("O(∩_∩)O哈哈~") else:print("今天还是乖乖的吧&#xff01;否则小命不保") #BMI 体重 /&#xff08;身…

[mysql][sql]安装完mysql8跨主机不能访问解决办法

SQL语句是针对MySQL数据库的操作&#xff0c;用于更新用户信息和用户密码。 use mysql; update user set host% where userroot; ALTER USER root% identified with mysql_native_password by 密码;以下是每个命令的简要说明&#xff1a; 切换到mysql数据库: USE mysql; 这…

css实现闪烁渐变背景,@property自定义属性

自 2024 年 7 月起&#xff0c;此功能适用于最新的设备和浏览器版本。此功能可能无法在较旧的设备或浏览器中使用。 property 是 CSS 中一个相对较新的功能&#xff0c;主要用于定义自定义属性&#xff08;即 CSS 变量&#xff09;的类型、继承性以及初始值。它允许开发者更好地…

ArkTS---HAR

HAR&#xff08;Harmony Archive&#xff09;是静态共享包&#xff0c;可以包含代码、C库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。 一、使用场景 作为二方库&#xff0c;发布到OHPM私仓&#xff0c;供公司内部其他应用使用。作为…

Linux --- 文件系统

1. 文件系统的概念 Linux 文件系统是一种用于管理、存储和组织数据的层次结构&#xff0c;用于在 Linux 操作系统中管理磁盘上的数据存储。它定义了如何在存储介质&#xff08;如硬盘、固态硬盘或 USB 闪存&#xff09;上组织文件和目录&#xff0c;以及如何读取、写入和操作这…

java整合DL645-2007与Dl645-1997

注意事项: 前导字节-一般在传输帧信息前,都要有0~4个FE不等,所以这里要注意,对于主站来说,直接发送4个FE作为前导字节即可。而从站回复,就不一定了,根据厂家不同而不同,有些没有FE的,也有4个FE的,所以对于接受程序,一定要慎重传输次序-所有的数据项都是先传低字节,…

鸿蒙HarmonyOS实战:IPC与RPC设备内进程通信

基本 IPC&#xff08;Inter-Process Communication&#xff09;与RPC&#xff08;Remote Procedure Call&#xff09;用于实现跨进程通信&#xff0c;不同的是前者使用Binder驱动&#xff0c;用于设备内的跨进程通信&#xff0c;后者使用软总线驱动&#xff0c;用于跨设备跨进…

嵌入式八股-C++面试35题(20240824)

1. 进程和线程的基本概念是什么&#xff1f; 进程&#xff1a;进程是操作系统分配资源的基本单位&#xff0c;是一个正在运行的程序实例。每个进程都有自己的内存空间、文件句柄和其他资源。线程&#xff1a;线程是进程的一个执行单元&#xff0c;是CPU调度和分派的基本单位。…

K8S部署MySQL5.7的主从服务

mysql-slave-0是master mysql-slave-1是备份 当mysql写的时候&#xff0c;找headless service中的 mysql-slave-0.mysql57-slave-headless&#xff1b;当mysql读的时候&#xff0c;找clusterip service中的mysql57-slave-read读&#xff0c;实现读写分离。 statefulset维护两个…

linux文本分析工具grep、sed和awk打印输出文本的单双奇偶行(grep也可以打印奇偶行)以及熟悉的ssh命令却有你不知道的一些用法

一、linux文本分析工具grep、sed和awk打印输出文本的单双奇偶行&#xff08;grep也可以打印奇偶行&#xff09; 其实sed和awk要打印输出奇偶行是很容易的事情&#xff0c;不过只能使用grep来输出奇偶行的话怎么实现呢&#xff1f;今天我就想了一下&#xff0c;如果真的只能使用…

【Leetcode 1897 】重新分配字符使所有字符串都相等 —— 数组模拟哈希表

给你一个字符串数组 words&#xff08;下标 从 0 开始 计数&#xff09;。 在一步操作中&#xff0c;需先选出两个 不同 下标 i 和 j&#xff0c;其中 words[i] 是一个非空字符串&#xff0c;接着将 words[i] 中的 任一 字符移动到 words[j] 中的 任一 位置上。 如果执行任意…

Latex 插入图片或表格导致页面空白过多

如图所示&#xff1a; Latex 插入图片或表格导致页面空白过多 我们可以采用这个方式来减少空白。 \documentclass{article} \usepackage{graphicx} % 包含图形支持 \usepackage{caption} % 提供更多对caption的控制% 设置标题上方和下方的间距 \setlength{\abovecaptionskip}{…

学习记录:js算法(十二):柱状图中最大的矩形

文章目录 柱状图中最大的矩形我的思路网上思路 总结 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1:上图 输入&#xff1a;…

mac 安装Arthas

mac安装有两种方式 1.第一步安装Arthas 第一种&#xff1a; curl -L https://arthas.aliyun.com/install.sh | sh 第二种jar包形式 curl -O https://arthas.aliyun.com/arthas-boot.jar个人比较推荐第一种因为运行测试成功了 第一种安装后可能会出现一些命令不符合 需…

网安新声 | 从微软“狂躁许可”漏洞事件看安全新挑战与应对策略

网安加社区【网安新声】栏目&#xff0c;汇聚网络安全领域的权威专家与资深学者&#xff0c;紧跟当下热点安全事件、剖析前沿技术动态及政策导向&#xff0c;以专业视野和前瞻洞察&#xff0c;引领行业共同探讨并应对新挑战的策略与可行路径。 近期&#xff0c;微软披露了一个最…

CyberScraper-2077+simple-one-api:使用大模型爬虫

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 swift与Internvl下的多模态大模型分布式微调指南&#xff08;附代码和数据&#xff…