从零学算法135

devtools/2024/11/13 9:21:00/

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

  • 贪心:相邻两个孩子评分更高的孩子会获得更多的糖果,也就是说当有相邻孩子 AB 时,可以转化为以下两条规则:
    • 左规则:ratingsA > ratingsB 时我们需要保证 A糖果 > B糖果,
    • 右规则:ratingsA < ratingsB 时我们需要保证 A糖果 < B糖果,
  • 相等时则无论怎么分,都不会破坏 “相邻两个孩子评分更高的孩子会获得更多的糖果” 这一条规则
  • 那我们先给所有学生分配一颗糖
  • 然后从左往右遍历,用 left[] 记录学生糖数,如果有后面的评分大于前面的,就使得后面的学生所得糖果比前面的多一个,即 left[i] = left[i-1] + 1,这样就能保证 left[] 都满足左规则
  • 再从右往左遍历,同理,有前面评分大于后面的,就 right[i] = right[i+1] + 1,能保证 right[] 都满足右规则
  • 最后,left[i] 与 right[i] 中的最大值就能同时满足左右规则。比如 [1, x, 5],为了满足左规则可以使 x = 2,而为了满足右规则可以使 x = 6,为了同时满足左右规则我们就只能取其中的最大值 6
  •   public int candy(int[] ratings) {int n = ratings.length;int[] left = new int[n];int[] right = new int[n];Arrays.fill(left, 1);Arrays.fill(right, 1);for(int i = 1; i < n; i++){if(ratings[i] > ratings[i - 1])left[i] = left[i - 1] + 1;}int count = left[n - 1];for(int i = n - 2; i >= 0; i--){if(ratings[i] > ratings[i + 1])right[i] = right[i + 1] + 1;count += Math.max(left[i], right[i]); }return count;}
    

http://www.ppmy.cn/devtools/22172.html

相关文章

【K8s】工作以来遇到的K8s相关问题、故障

工作以来遇到的有关K8S相关问题及故障 deployments 资源 2副本情况下&#xff0c;一个springboot的pod能访问&#xff0c;一个不能&#xff08;端口不通&#xff09;在K8S运维(多人管理) 不知道谁在链路加了个跨域配置&#xff0c;导致前端打不开图片某些安全部门演练时经常在…

对增加LLaMA 3 上下文长度技术的猜测

AI苏妲己&#xff1a; 在许多应用场景中&#xff0c;如长对话、长文档摘要或长期计划执行等&#xff0c;大语言模型能够支持较长的上下文窗口是非常理想的。以一次处理约50页书籍内容为例&#xff0c;通常需要模型支持32K个token的上下文长度。目前&#xff0c;主流的大语言模…

01.JAVAEE初阶之计算机如何工作

1.一台机器如何组成 冯诺依曼体系 CPU 中央处理器: 进行算术运算和逻辑判断.存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)输入设备: 用户给计算机发号施令的设备.输出设备: 计算机个用户汇报结果的设备. 针对存储空间 硬盘 > 内存 >> CPU针对数据访问…

JDBC 常用的API

JDBC是通过IDEA来操作数据库 简单的例子 public class jdbcStart {Testpublic void testjdbc()throws Exception{//1.注册驱动&#xff08;确认使用哪个数据库&#xff09;Class.forName("com.mysql.cj.jdbc.Driver");//2.连接数据库&#xff08;获取到一个数据库连…

Csharp_pta2_2

7-7 C# 1.12 区间找数 编写控制台应用程序&#xff0c;根据用户输入的a、b、c、d值&#xff08;均为正整数且a不大于b&#xff09;&#xff0c;输出在[a, b]区间中能被c整除&#xff0c;但是不能被d整除的数。 输入格式: 用户在一行中输入四个正整数&#xff0c;分别对应a、…

边缘计算概述_5.边缘计算应用场景

1.智慧园区 智慧园区建设是利用新一代信息与通信技术来感知、监测、分析、控制、整合园区各个关键环节的资源&#xff0c;在此基础上实现对各种需求做出智慧的响应&#xff0c;使园区整体的运行具备自我组织、自我运行、自我优化的能力&#xff0c;为园区企业创建一个绿色、和谐…

【Leetcode】377. 组合总和 Ⅳ

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 给你一个由 不同 整数组成的数组 n u m s nums nums&#xff0c;和一个目标整数 t a r g e t target target 。请你从 n u m s nums nums 中找出并返回总和为 t a r g e t targ…

初识BootStrap

目录 前言: 1.Bootstrap的特点包括&#xff1a; 1.1响应式设计&#xff1a; 1.2组件丰富&#xff1a; 1.3易于定制&#xff1a; 1.4兼容性良好&#xff1a; 1.5强大的社区支持&#xff1a; 1.6一致的样式和布局&#xff1a; 1.7 插件和扩展性 2.初识Ajax: 2.1同步请求…