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

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 * 10^4
  • 0 <= ratings[i] <= 2 * 10^4

我们可以先给每个孩子都分一颗糖果,然后就可以在循环中给孩子分0颗糖果了。分组循环,先严格递增再严格递减的连续子数组为一组,就像一个山峰,但这个山峰可以是一半的,即只有严格递增部分或只有严格递减部分。除峰顶外,假设上升阶段有n个,那么可以依次给0、1、2...n-1个糖果,假设下降阶段有m个,那么可以依次给m-1、m-2...0个糖果,然后给峰顶max(n,m)个糖果。这样以山峰为单位,山脚位置都给0颗糖(因为我们已经给每个孩子都分了一颗糖),可以避免山脚位置的重复计算。然后分组循环,一个山峰是一组,计算每组的糖数即可:

class Solution {
public:int candy(vector<int>& ratings) {int n = ratings.size();int ans = 0;int i = 0;while (i < n) {int start = i;++i;// 上升阶段while (i < n && ratings[i] > ratings[i - 1]) {++i;}int top = i - 1;// 下降阶段while (i < n && ratings[i] < ratings[i - 1]) {++i;}int up = 0;// 上升阶段的评分数if (start > 0 && ratings[start] > ratings[start - 1]) {up = top - start + 1;} else {up = top - start;}// 下降阶段的评分数int down = i - top - 1;ans += (up * (up - 1)) / 2 + (down * (down - 1)) / 2 + max(up, down);}return ans + ratings.size();}
};

如果ratings的大小为n,那么该算法时间复杂度为O(n),空间复杂度为O(1)。

http://www.dtcms.com/a/406149.html

相关文章:

  • 计算机视觉:OpenCV+Dlib 人脸检测
  • 开源 C# 快速开发(二)基础控件
  • 安庆公司做网站国外开源商城系统
  • 烟台哪家公司可以做网站灌云县建设局网站
  • 基于sprintboot+vue的智慧辅助学习系统(源码+论文+部署+安装)
  • 基于阿里云系列平台的python微服务设计与DevOps实践
  • 山东临沂网站开发免费的推广网站
  • PAT乙级_1047 编程团体赛_Python_AC解法_无疑难点
  • SystemVerilog小白入门1, iverilog+VScode
  • 微算法科技(NASDAQ: MLGO)融合二次矩阵变换模型,研发基于区块链的可溯源IP版权保护算法
  • 示范校建设验收网站做ppt图片用的网站
  • 新宁县建设局网站沭阳网站建设多少钱
  • 脑电模型实战系列:深化网络-多层全连接在情绪识别中的威力
  • Java HTTP协议(二)--- HTTPS,Tomcat
  • 深度学习学习路线图:从MNIST到MobileNetV4,从理论到实践的完整指南——轻量化模型演进与前沿实践
  • Linux925 shell 变量:本地、环境变量、全局变量;数组:普通数组、关联数组;交互定义、basename、dirname
  • 低价网站备案海报设计制作平台
  • 解读2025 《可信数据空间 技术能力评价规范》
  • 【51单片机篮球记分器+复合按键操作】2022-12-22
  • 网站域名属于哪里管网站 类库
  • 【超分辨率专题】DLoRAL:视频超分辨率的新范式,细节与时序一致的双重提升
  • VS2022 C++调试完全指南
  • 【JAVA】从入门到放弃-01-HelloWorld
  • 玳瑁的嵌入式日记---0925(ARM--时钟)
  • 《代码的“言外之意”:从词源学透彻理解编程》字符的“双重生活”:从Escape到Raw
  • 【Spark+Hive+hadoop】人类健康生活方式数据分析
  • K8S部署的rook-ceph下线osd流程
  • 建站历史查询如何做网站推广页面
  • maven使用非明文密码配置
  • 做网站后期维护工资贴吧wordpress ad widget