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

【NO.15】LeetCode经典150题-135. 分发糖果

文章目录

  • 【NO.15】LeetCode经典150题-135. 分发糖果
  • 解题:贪心

【NO.15】LeetCode经典150题-135. 分发糖果

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

解题:贪心

我们可以将「相邻的孩子中,评分高的孩子必须获得更多的糖果」这句话拆分为两个规则,分别处理。

  • 左规则:当 ratings[i−1]<ratings[i] 时,i 号学生的糖果数量将比 i−1 号孩子的糖果数量多。

  • 右规则:当 ratings[i]>ratings[i+1] 时,i 号学生的糖果数量将比 i+1 号孩子的糖果数量多。

我们遍历该数组两次,处理出每一个学生分别满足左规则或右规则时,最少需要被分得的糖果数量。每个人最终分得的糖果数量即为这两个数量的最大值。

具体地,以左规则为例:我们从左到右遍历该数组,假设当前遍历到位置 i,如果有 ratings[i−1]<ratings[i] 那么 i 号学生的糖果数量将比 i−1 号孩子的糖果数量多,我们令 left[i]=left[i−1]+1 即可,否则我们令 left[i]=1。

在实际代码中,我们先计算出左规则 left 数组,在计算右规则的时候只需要用单个变量记录当前位置的右规则,同时计算答案即可。

// 时间空间都为O(n)
class Solution {public int candy(int[] ratings) {int n = ratings.length;if (n == 1) {return 1;}int[] left = new int[n];for (int i = 0; i < n; i++) {if (i > 0 && ratings[i] > ratings[i-1]) {left[i] = left[i-1]+1;} else {left[i] = 1;}} int result = 0;int right = 0;for (int i = n-1; i >= 0; i--) {if (i < n-1 && ratings[i] > ratings[i+1]) {right++;} else {right = 1;}result += Math.max(left[i], right);}return result;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C#高效内存管理:运用对象池与结构体优化技术
  • 文件上传的学习
  • 功能强大的开源数据中台系统 DataCap 2024.03.9 发布
  • 理解 Maven 依赖范围及编译与运行时的需求
  • C#文件的输入和输出
  • 产品入门篇笔记
  • 2024年国家自然科学基金即将公布,如何第一时间知道评审结果?
  • priority_queue的使用方法
  • 树状数组C/C++实现
  • 解决 JS WebSocket 心跳检测 重连
  • Hive出现BigDecimal wourld overflow supported range问题
  • Codeforces Round 964 (Div. 4) A-E Java题解
  • 告别无序 10款科研项目管理工具为您的科研之路加速
  • 【战术无线电通信】数据链
  • TinyTNAS: 不依赖GPU的、有时间限制的、硬件感知的神经架构搜索,用于TinyML时间序列分类
  • Google 是如何开发 Web 框架的
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • create-react-app项目添加less配置
  • happypack两次报错的问题
  • Linux中的硬链接与软链接
  • MQ框架的比较
  • node入门
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue学习系列(二)vue-cli
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 闭包--闭包作用之保存(一)
  • 分布式任务队列Celery
  • 分布式熔断降级平台aegis
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端性能优化--懒加载和预加载
  • 前言-如何学习区块链
  • 使用SAX解析XML
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • #pragma 指令
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (七)Java对象在Hibernate持久化层的状态
  • (生成器)yield与(迭代器)generator
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (四) Graphivz 颜色选择
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)德国人的记事本
  • (转)项目管理杂谈-我所期望的新人
  • .htaccess 强制https 单独排除某个目录
  • .NET Core中的时区转换问题
  • .net framework 4.0中如何 输出 form 的name属性。