首页 > 其他分享 >LeetCode 135.分发糖果

LeetCode 135.分发糖果

时间:2022-11-25 14:38:15浏览次数:62  
标签:分发 int 孩子 评分 num 135 糖果 LeetCode size

LeetCode 135.分发糖果题目地址:

​https://leetcode-cn.com/problems/candy/​


题目描述:

老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。

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

    1. 每个孩子至少分配到 1 个糖果。

    2. 评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。

那么这样下来,老师至少需要准备多少颗糖果呢?


示例 1:

输入:[1,0,2]

输出:5

解释:你可以分别给这三个孩子分发 2、1、2 颗糖果。


示例 2:

输入:[1,2,2]

输出:4

解释:你可以分别给这三个孩子分发 1、2、1 颗糖果。

          第三个孩子只得到 1 颗糖果,这已满足上述两个条件。


题目分析:

输入为一个数组,数组存放每个孩子的评分,分数比两侧邻位孩子高的,分发的糖果应该比两侧邻位的孩子更多。每个孩子至少分配一个糖果,所以我们可以先给每个孩子获得的糖果数赋值为1,然后从左到右遍历一次,右边孩子评分比左边孩子评分高的,右边孩子糖果数更新为左边孩子糖果数加一。最后再从右到左遍历一次,左边孩子评分比右边孩子评分高的,且左边孩子当前的糖果数不大于右边孩子的糖果数,左边孩子糖果数更新为右边孩子糖果数加一。


题解:

执行用时: 2 ms

内存消耗: 39.5 MB

class Solution {
public int candy(int[] ratings) {
// 获取孩子的个数
int size = ratings.length;
// 如果孩子个数为0,即没有孩子,不用分发糖果,糖果总数为0
// 如果孩子个数为1,即只有一个孩子,只需满足此孩子,糖果总数为1
if (size < 2)
{
return size;
}
// 建立一个新数组存放每个孩子所获糖果数,数组长度与孩子个数相等
int[] num = new int[size];
// 第一步,给每个孩子分发一颗糖果
for (int i = 0; i < size; ++i)
{
num[i]++;
}
// 第二步,从左到右遍历孩子所得评分数组
for (int i = 1; i < size; ++i)
{
// 如果右边孩子评分高于左边孩子评分
if (ratings[i - 1] < ratings[i])
{
// 右边孩子所得糖果数比左边孩子所得糖果数多一
num[i] = num[i - 1] + 1;
}
}
// 第三步,从右到左遍历孩子所得评分数组
for (int i = size - 1; i > 0; --i)
{
// 如果左边孩子评分高于右边孩子评分
if (ratings[i] < ratings[i - 1])
{
// 左边孩子所得糖果数取当前所得糖果数与右边孩子所得糖果数加一的最大值
num[i - 1] = Math.max(num[i - 1], num[i] + 1);
}
}
// 第四步,求需准备糖果的总数
// 定义变量存放需准备糖果的总数
int sum = 0;
// 遍历每个孩子所得糖果数组,获得糖果总数
for (int x : num)
{
sum += x;
}
// 返回需准备糖果的总数
return sum;
}
}

题目来源:力扣(LeetCode)

标签:分发,int,孩子,评分,num,135,糖果,LeetCode,size
From: https://blog.51cto.com/u_15891283/5886655

相关文章

  • LeetCode 435.无重叠区间
    LeetCode435.无重叠区间题目地址:​​https://leetcode-cn.com/problems/non-overlapping-intervals/​​题目描述:给定一个区间的集合,找到需要移除区间的最小数量,使剩余区......
  • LeetCode 452.用最少数量的箭引爆气球
    LeetCode452.用最少数量的箭引爆气球题目链接:​​https://leetcode-cn.com/problems/minimum-number-of-arrows-to-burst-balloons/​​题目描述:在二维空间中有许多球形......
  • LeetCode 455.分发饼干
    LeetCode455.分发饼干题目地址:​​https://leetcode-cn.com/problems/assign-cookies/​​题目描述:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最......
  • LeetCode 300.最长递增子序列(中等)
    题目描述给你一个整数数组​​nums​​,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,​​[3......
  • LeetCode 912.排序数组
    题目描述:给你一个整数数组 nums,请你将该数组升序排列。示例1:输入:nums= [5,2,3,1]输出:[1,2,3,5]示例2:输入:nums= [5,1,1,2,0,0]输出:[0,0,1,1,2,5]提示:1. 1 <= nums......
  • LeetCode 15. 三数之和(中等)
    题目描述:给你一个包含​​n​​​个整数的数组​​nums​​​,判断 ​​nums​​ 中是否存在三个元素a,b,c,使得 a+b+c=0?请你找出所有和为​​0​​且不重......
  • LeetCode 16.最接近的三数之和(中等)
    题目描述:给你一个长度为​​n​​​的整数数组 ​​nums​​​ 和一个目标值 ​​target​​​。请你从​​nums​​​中选出三个整数,使它们的和与 ​​target​......
  • LeetCode 739.每日温度(中等)
    题目描述:请根据每日​​气温​​​列表​​temperatures​​​,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用​​0​​来代替......
  • LeetCode 20.有效的括号(简单)
    题目描述:给定一个只包括​​'('​​​,​​')'​​​,​​'{'​​​,​​'}'​​​,​​'['​​​,​​']'​​​ 的字符串​​s​​,判断字符串是否有效。有效字符串需满足:......
  • LeetCode 155.最小栈(简单)
    题目描述:设计一个支持​​push​​​,​​pop​​​,​​top​​操作,并能在常数时间内检索到最小元素的栈。​​push(x)​​——将元素x推入栈中。​​pop()​​ —......