• LeetCode 135. Candy


    LeetCode 135. Candy (分发糖果)

    题目

    链接

    https://leetcode.cn/problems/candy/

    问题描述

    n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。

    你需要按照以下要求,给这些孩子分发糖果:

    每个孩子至少分配到 1 个糖果。
    相邻两个孩子评分更高的孩子会获得更多的糖果。
    请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

    示例

    输入:ratings = [1,0,2]
    输出:5
    解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。

    提示

    n == ratings.length
    1 <= n <= 2 * 104
    0 <= ratings[i] <= 2 * 104

    思路

    左右两边都遍历一下,分别处理两条规则,之后再整体判断一下,取最大值。

    复杂度分析

    时间复杂度 O(n)
    空间复杂度 O(n)
    

    代码

    Java

        public int candy(int[] ratings) {
            int[] cl = new int[ratings.length];
            int[] cr = new int[ratings.length];
            cl[0] = 1;
            cr[ratings.length - 1] = 1;
            for (int i = 1; i < ratings.length; i++) {
                if (ratings[i] > ratings[i - 1]) {
                    cl[i] = cl[i - 1] + 1;
                } else {
                    cl[i] = 1;
                }
            }
            for (int i = ratings.length - 2; i >= 0; i--) {
                if (ratings[i] > ratings[i + 1]) {
                    cr[i] = cr[i + 1] + 1;
                } else {
                    cr[i] = 1;
                }
            }
            int sum = 0;
            for (int i = 0; i < ratings.length; i++) {
                sum += Math.max(cl[i], cr[i]);
            }
            return sum;
        }
    
  • 相关阅读:
    C# 窗体WinForm中动态显示radioButton实例
    C#和Java交互相关研究
    c# 注册表操作,创建,删除,修改,判断节点是否存在
    C#单例模式的三种写法
    C#中使用TCP通信
    c#中this的用法
    C#单例模式的三种写法
    二十道经典C#面试题
    Linux chattr 命令详解
    Linux ulimit命令详解
  • 原文地址:https://www.cnblogs.com/blogxjc/p/16401080.html
Copyright © 2020-2023  润新知