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

方法1:

第一次正向遍历,保证每个孩子右侧的具有更高分数的孩子获得更多的糖果。
第二次反向遍历,保证每个孩子左侧的具有更高分数的孩子获得更多的糖果。
需要遍历两次,并存储每个孩子的糖果数。

class Solution(object):
    def candy(self, ratings):
        n = len(ratings)
        can = [1]*n
        for i in range(1, n):
            if ratings[i] > ratings[i - 1]:
                can[i] = can[i - 1] + 1
        for i in range(n - 2, -1, -1):
            if ratings[i] > ratings[i + 1]:
                can[i] = max(can[i], can[i + 1] + 1)
        return int(sum(can))
方法2:

只需要遍历一次,且不存储每个孩子的糖果数。执行效率更高。

class Solution(object):
    def candy(self, ratings):
        i = 0
        ret = pre = vi = vi_1 = 1
        for j in range(1, len(ratings)):
            if ratings[j] >= ratings[j - 1]:
                if ratings[j] > ratings[j - 1]:
                    pre = pre + 1
                    ret += pre
                else:
                    pre = 1
                    ret += 1
                i = j
                vi = pre
                vi_1 = 1
            else:
                if pre == 1:
                    if i + 1 != j:
                        vi_1 += 1
                    if vi == vi_1:
                        vi += 1
                        ret += j - i
                    else:
                        ret += j - i - 1
                pre = 1
                ret += 1
        return ret

相关推荐

  1. 135. 分发糖果

    2024-01-10 10:30:03       35 阅读
  2. -135.分发糖果

    2024-01-10 10:30:03       32 阅读
  3. 135. 分发糖果(贪心)

    2024-01-10 10:30:03       35 阅读
  4. [题解]135. 分发糖果

    2024-01-10 10:30:03       11 阅读
  5. 135. 分发糖果

    2024-01-10 10:30:03       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-10 10:30:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-10 10:30:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-10 10:30:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-10 10:30:03       20 阅读

热门阅读

  1. 基于长短期神经网络lstm的电子密度预测

    2024-01-10 10:30:03       40 阅读
  2. 可视化试题(二)

    2024-01-10 10:30:03       32 阅读
  3. 免费用chatGPT

    2024-01-10 10:30:03       44 阅读
  4. 第7章 DOM(下)

    2024-01-10 10:30:03       34 阅读
  5. AI真正的Killer App 仍然缺席

    2024-01-10 10:30:03       35 阅读
  6. 破解国企绩效管理中存在的三大难题

    2024-01-10 10:30:03       24 阅读
  7. MATLAB对数据隔位抽取和插值的几种方法

    2024-01-10 10:30:03       35 阅读
  8. 【气候极端指数】MATLAB计算各种气候极端指数

    2024-01-10 10:30:03       39 阅读