135. 分发糖果(困难)-贪心

Posted hequnwang10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了135. 分发糖果(困难)-贪心相关的知识,希望对你有一定的参考价值。

一、题目描述

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

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

  • 每个孩子至少分配到 1 个糖果。
  • 相邻两个孩子评分更高的孩子会获得更多的糖果。

请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

示例 1:
输入:ratings = [1,0,2]
输出:5
解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。
示例 2:
输入:ratings = [1,2,2]
输出:4
解释:你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。
     第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。

二、解题

贪心

三次遍历,从左向右遍历一次,从右向左遍历,然后保存在数组中,最后一次遍历取最大值。


class Solution 
    public int candy(int[] ratings) 
        int length = ratings.length;
        int[] left = new int[length];
        int[] right = new int[length];
        Arrays.fill(left,1);
        Arrays.fill(right,1);
        for(int i = 1;i<length;i++)
            if(ratings[i] > ratings[i-1])
                left[i] = left[i-1] + 1;
            
        
        for(int i = length - 2;i>=0;i--)
            if(ratings[i]>ratings[i+1])
                right[i] = right[i+1] + 1;
            
        
        int res = 0;
        for(int i = 0;i<length;i++)
            res += Math.max(left[i],right[i]); 
        
        return res;
    

时间复杂度:O(n);

空间复杂度:O(n)。

以上是关于135. 分发糖果(困难)-贪心的主要内容,如果未能解决你的问题,请参考以下文章

135. 分发糖果贪心算法

leetcode困难135分发糖果

Leetcode No.135 分发糖果(贪心)

Leetcode No.135 分发糖果(贪心)

贪心热门问题6:分发糖果

贪心算法——leetcode135.分发糖果