力扣经典150题第十五题:分发糖果

目录

    • 力扣经典150题第十五题:分发糖果
      • 1. 题目描述
      • 2. 问题分析
      • 3. 解题思路
      • 4. 代码实现
      • 5. 时间复杂度分析
      • 6. 应用和扩展
      • 7. 总结
      • 8. 参考资料

力扣经典150题第十五题:分发糖果

1. 题目描述

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

2. 问题分析

  • 可以使用两次遍历来解决问题,首先从左往右遍历,保证右边评分高的孩子获得更多糖果;然后从右往左遍历,保证左边评分高的孩子获得更多糖果。

3. 解题思路

  1. 初始化 candies 数组,每个孩子至少有一个糖果。
  2. 从左往右遍历 ratings,如果右边孩子的评分比左边高,那么右边孩子的糖果数为左边孩子的糖果数加一。
  3. 从右往左遍历 ratings,如果左边孩子的评分比右边高,并且左边孩子的糖果数不大于右边孩子的糖果数,那么左边孩子的糖果数更新为右边孩子的糖果数加一。
  4. 统计 candies 数组中的总糖果数即为最少需要准备的糖果数目。

4. 代码实现

class Solution {public int candy(int[] ratings) {int n = ratings.length;int[] candies = new int[n];Arrays.fill(candies, 1); // 初始每个孩子至少有一个糖果// 从左往右遍历,保证右边评分高的孩子获得更多糖果for (int i = 1; i < n; i++) {if (ratings[i] > ratings[i - 1]) {candies[i] = candies[i - 1] + 1;}}// 从右往左遍历,保证左边评分高的孩子获得更多糖果for (int i = n - 2; i >= 0; i--) {if (ratings[i] > ratings[i + 1] && candies[i] <= candies[i + 1]) {candies[i] = candies[i + 1] + 1;}}// 计算总糖果数int totalCandies = 0;for (int candy : candies) {totalCandies += candy;}return totalCandies;}
}

5. 时间复杂度分析

  • 两次遍历数组,时间复杂度为 O(n)。

6. 应用和扩展

  • 该算法可以有效地解决分发糖果的问题,通过两次遍历数组来保证相邻孩子糖果分配的要求。
  • 可以在实际中应用于评分制度下的奖励分配等场景。

7. 总结

本文介绍了如何使用两次遍历数组来解决分发糖果的问题,保证相邻孩子评分高的孩子获得更多糖果。

8. 参考资料

  • LeetCode 官网
  • 算法导论

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

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

相关文章

知识图谱与人工智能:携手共进

知识图谱与人工智能&#xff1a;携手共进 一、引言&#xff1a;知识图谱与人工智能的融合 在这个数据驱动的时代&#xff0c;知识图谱与人工智能&#xff08;AI&#xff09;之间的融合不仅是技术发展的必然趋势&#xff0c;也是推动各行各业创新的关键。知识图谱&#xff0c;作…

游戏行业科普 (二)游戏是怎么做出来,怎么卖出去的?

游戏行业科普系列文章&#xff0c;大家可以关注起来&#xff0c;等我慢慢芬分享~~ 《蛋仔派对》 一、研运流程--游戏是怎么做出来的 一款游戏的开发和运营大体上可以分为预研立项、设计开发、测试调优、发行上线和成熟运营几个阶段。 1&#xff09;预研立项&#xff1a; 初始研…

贪心算法|56.合并区间

力扣题目链接 class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> result;if (intervals.size() 0) return result; // 区间集合为空直接返回// 排序的参数使用了lambda表达…

Nginx的基本使用

目录 介绍Nginx&#xff1a; 其优点有很多&#xff1a; 如何下载Nginx&#xff1a; 下载Nginx 启动Nginx ​编辑 如何用Nginx创建网站 Nginx自带的网站 分析网页 转变ip地址为自己的网页 换内容 换文件 介绍Nginx&#xff1a; Nginx是一个高性能的HTTP和反向代理w…

如何将普通maven项目转为maven-web项目

文件-项目结构&#xff08;File-->Project Structure &#xff09; 模块-->learn&#xff08;moudle-->learn&#xff09; 选中需要添加web的moudle&#xff0c;点击加号&#xff0c;我得是learn&#xff0c;单击选中后进行下如图操作&#xff1a; 编辑路径 结果如下…

相似图片分类 [华为]【并查集】

题目描述&#xff1a; 小明想要处理一批图片&#xff0c;将相似的图片分类&#xff0c;他首先对图片的特征采样&#xff0c;得到图片之间的相似度&#xff0c;然后 按照以下规则判断图片是否可以归为一类&#xff1a; 1&#xff09;相似度>0表示两张图片相似&#xff1b; 2…

请描述TensorFlow中的Saver对象及其用途。在TensorFlow中,如何保存和加载训练好的模型?

请描述TensorFlow中的Saver对象及其用途。 TensorFlow中的Saver对象是一个用于保存和加载模型参数的类。Saver对象在TensorFlow中扮演着至关重要的角色&#xff0c;尤其是在模型训练和部署的过程中。 Saver对象的主要用途如下&#xff1a; 模型保存&#xff1a;在训练神经网络…

Open CASCADE学习|BrepOffsetAPI_ThruSections无法放样成Solid

目录 1、边界线&#xff08;TopoDS_Wire&#xff09;不在一个平面上时&#xff0c;无法生成Solid 2、边界线&#xff08;TopoDS_Wire&#xff09;在一个平面上时&#xff0c;可以生成Solid 3、边界线&#xff08;TopoDS_Wire&#xff09;不在一个平面上时&#xff0c;添加To…

【vue】v-model 双向数据绑定

:value&#xff1a;单向数据绑定v-model&#xff1a;双向数据绑定 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

学习云计算HCIE选择誉天有什么优势?

誉天云计算课程优势实战性强 课程注重实践操作&#xff0c;通过实际案例和实验操作&#xff0c;让学员深入了解云计算的应用场景和实际操作技能。课程内容全面 涵盖所有云计算涉及的IT基础知识、服务器、存储、网络等方面的基础知识&#xff0c;开源操作系统Linux&#xff0c;开…

Spring Cloud启动类上的注解详解

在微服务架构的世界里&#xff0c;Spring Cloud以其丰富的功能和简洁的编程模型成为了开发者的心头好。本文将深入探讨Spring Cloud启动类中的那些关键注解&#xff0c;带你一步步解锁微服务开发的秘密。 1. 引言 Spring Cloud应用的启动类是微服务的大脑&#xff0c;通过一系…

Python(1):认识Python并且了解一些简单函数

文章目录 一、Python的优势及其使用场景二、Python环境的安装三、Python中的变量及其命名四、Python中的注释五、一些简单常见的函数和认识ASCII表六、Python导入模块的方式 一、Python的优势及其使用场景 优点&#xff1a; 开发效率高&#xff1a;Python具有非常强大的第三方…

ChatGPT助力论文写作:让写作变得更高效

ChatGPT无限次数:点击直达 ChatGPT助力论文写作&#xff1a;让写作变得更高效 随着人工智能技术的不断发展&#xff0c;ChatGPT作为一种强大的自然语言处理工具&#xff0c;已经成为许多研究人员和学生在论文写作过程中的得力助手。ChatGPT可以帮助用户生成自然流畅的文字&…

设计模式代码实战-工厂模式

1、问题描述 小明家有两个工厂&#xff0c;一个用于生产圆形积木&#xff0c;一个用于生产方形积木&#xff0c;请你帮他设计一个积木工厂系统&#xff0c;记录积木生产的信息。 输入案例 3 Circle 1 Square 2 Circle 1 2、工厂模式 将产品的创建过程封装在⼀个⼯⼚类中&am…

下采样-最大池化方法

下采样的最大池化&#xff08;Max Pooling&#xff09;方法是一种常用的降低图像分辨率的方法&#xff0c;它通过在图像的不重叠区域内选择像素值的最大值来减少图像的大小。下面通过图文并茂的方式详细描述最大池化方法的实现过程。 现在我们想对这张图像进行下采样&#xff…

我国量子信息科技创新发展面临的挑战及建议——基于中美对比视角的分析

2024年2月&#xff0c;中国科学技术发展战略院慕慧娟博士、丁明磊研究员及光子盒顾成建一起在《科技管理研究》上发表文章——《我国量子信息科技创新发展面临的挑战及建议&#xff1a;基于中美对比视角的分析》。 在此&#xff0c;我们整理并发布这篇文章&#xff0c;欢迎感兴…

数据湖/数据仓库

数据湖&#xff08;Data Lake&#xff09;和数据仓库&#xff08;Data Warehouse&#xff09;的主要区别在于它们的目的、存储的数据类型、数据处理方式、数据结构、数据安全性以及数据应用。以下是相关介绍&#xff1a; 目的。数据湖旨在作为一个集中的存储库&#xff0c;存储…

librosa.beat.beat_track()报错解决记录

在使用librosa.beat.beat_track(yy, srsr)时报错&#xff1a;AttributeError: module scipy.signal has no attribute hann&#xff0c;很奇怪的问题&#xff0c;大家好像都没有遇到这个错误&#xff1a; 很奇怪&#xff0c;这个hann明明是scipy.signal.windows里面的。。虚拟环…

【Spring】面试题汇总

Spring1. 什么是 Spring 框架?2. 谈谈你对于 Spring IoC 的了解3. 什么是依赖注入4. Spring的依赖注入有几种方式5. 将一个类声明为 Bean 的注解有哪些?6. Component 和 Bean 的区别是什么&#xff1f;7. 注入 Bean 的注解有哪些&#xff1f;8. Bean 的作用域有哪些?9. Bean…

目标检测YOLO实战应用案例100讲-【目标检测】缺陷检测(三)

目录 瓷砖缺陷检测 印刷缺陷的视觉检测原理 检测原理 针对型检测算法 通用型检测算法