使用kotlin解决这个问题:135. 分发糖果 困难 1.2K 相关企业 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
时间: 2024-02-17 10:03:21 浏览: 116
bestlyg#bestlyg-leetcode#135.分发糖果1
以下是使用 Kotlin 解决该问题的代码:
```kotlin
fun candy(ratings: IntArray): Int {
val n = ratings.size
val left = IntArray(n)
val right = IntArray(n)
var ans = 0
// 每个孩子至少分配一个糖果
for (i in 0 until n) {
left[i] = 1
right[i] = 1
}
// 从左向右遍历,确保右边高评分的孩子分配的糖果数比左边高评分的孩子多
for (i in 1 until n) {
if (ratings[i] > ratings[i - 1]) {
left[i] = left[i - 1] + 1
}
}
// 从右向左遍历,确保左边高评分的孩子分配的糖果数比右边高评分的孩子多
for (i in n - 2 downTo 0) {
if (ratings[i] > ratings[i + 1]) {
right[i] = right[i + 1] + 1
}
}
// 取两次遍历的糖果数的最大值
for (i in 0 until n) {
ans += maxOf(left[i], right[i])
}
return ans
}
```
该函数实现了题目中的要求,按照评分高低分发糖果,保证相邻两个孩子评分更高的孩子会获得更多的糖果,并且每个孩子至少分配一个糖果。最后返回需要准备的最少糖果数目。
阅读全文