【LeetCode每日一题】——135.分发糖果
创始人
2024-05-31 06:30:31
0

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【解题思路】
  • 七【题目提示】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 贪心算法

二【题目难度】

  • 困难

三【题目编号】

  • 135.分发糖果

四【题目描述】

  • n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。
  • 你需要按照以下要求,给这些孩子分发糖果:
    • 每个孩子至少分配到 1 个糖果。
    • 相邻两个孩子评分更高的孩子会获得更多的糖果。
  • 请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

五【题目示例】

  • 示例 1:

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

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

六【解题思路】

  • 这道题有难度,不太好想,主要利用贪心的思路遍历两次数组,分别从左到右遍历和从右到左遍历,也就是满足两个规则:
    • 左规则:从左到右遍历,因为题目要求每个人最少一个糖果,所以第一个人默认一个糖果,然后从第二个人开始遍历,如果第iii个人的评分大于第i−1i-1i−1个人的评分,根据题目要求,第iii个人的糖果数要比第i−1i-1i−1个人的糖果数多一个;如果第iii个人的评分小于等于第i−1i-1i−1个人的评分,那么第i−1i-1i−1个人的糖果数就是默认的一颗糖果。当然,需要使用一个数组来存储每个人的糖果数
    • 右规则:从右到左遍历,因为题目要求每个人最少一个糖果,所以最后个人默认一个糖果,然后从倒数第二个人开始遍历,如果第iii个人的评分大于第i+1i+1i+1个人的评分,根据题目要求,第iii个人的糖果数要比第i+1i+1i+1个人的糖果数多一个;如果第iii个人的评分小于等于第i+1i+1i+1个人的评分,那么第i−1i-1i−1个人的糖果数就是默认的一颗糖果。此时需要使用另一个数组来存储每个人的糖果数
  • 最后计算总的糖果数,将上面的得到的数组进行遍历,对于第iii个人,既要满足左规则也要满足右规则,所以取两者中的最大值
  • 最后返回结果即可

七【题目提示】

  • n==ratings.lengthn == ratings.lengthn==ratings.length
  • 1<=n<=2∗1041 <= n <= 2 * 10^41<=n<=2∗104
  • 0<=ratings[i]<=2∗1040 <= ratings[i] <= 2 * 10^40<=ratings[i]<=2∗104

八【时间频度】

  • 时间复杂度:O(n)O(n)O(n),其中nnn为传入数组的长度
  • 空间复杂度:O(n)O(n)O(n),其中nnn为传入数组的长度

九【代码实现】

  1. Java语言版
class Solution {public int candy(int[] ratings) {int len = ratings.length;int[] left = new int[len];int[] right = new int[len];left[0] = 1;for(int i = 1;i < len;i++){left[i] = ratings[i] > ratings[i - 1] ? left[i - 1] + 1 : 1;}right[len - 1] = 1;for(int i = len - 2;i>=0;i--){right[i] = ratings[i] > ratings[i + 1] ? right[i + 1] + 1 : 1;}int res = 0;for(int i = 0;ires += Math.max(left[i],right[i]);}return res;}
}
  1. C语言版
int candy(int* ratings, int ratingsSize)
{int* left = (int*)malloc(sizeof(int) * ratingsSize);int* right = (int*)malloc(sizeof(int) * ratingsSize);left[0] = 1;for(int i = 1;ileft[i] = ratings[i] > ratings[i - 1] ? left[i - 1] + 1 : 1;}right[ratingsSize - 1] = 1;for(int i = ratingsSize - 2;i>=0;i--){right[i] = ratings[i] > ratings[i + 1] ? right[i + 1] + 1 : 1;}int res = 0;for(int i = 0;ires += fmax(left[i],right[i]);}return res;
}
  1. Python版
class Solution:def candy(self, ratings: List[int]) -> int:N = len(ratings)left = [0] * Nright = [0] * Nleft[0] = 1for i in range(1,N):left[i] = left[i - 1] + 1 if ratings[i] > ratings[i - 1] else 1right[N - 1] = 1for i in range(N - 2,-1,-1):right[i] = right[i + 1] + 1 if ratings[i] > ratings[i + 1] else 1res = 0for i in range(0,N):res += max(left[i],right[i])return res

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

相关内容

热门资讯

宏微科技涨2.07%,成交额4... 5月12日,宏微科技(维权)涨2.07%,成交额4352.21万元,换手率1.26%,总市值34.6...
润建股份涨2.18%,成交额3... 5月12日,润建股份涨2.18%,成交额3.81亿元,换手率3.57%,总市值144.85亿元。异动...
力芯微涨2.29%,成交额85... 5月12日,力芯微涨2.29%,成交额8523.19万元,换手率1.70%,总市值50.13亿元。异...
华达新材涨0.12%,成交额4... 5月12日,华达新材涨0.12%,成交额4543.22万元,换手率1.09%,总市值41.94亿元。...
嘉元科技涨1.16%,成交额2... 5月12日,嘉元科技涨1.16%,成交额2.41亿元,换手率3.31%,总市值74.12亿元。异动分...
雅运股份涨1.33%,成交额5... 5月12日,雅运股份涨1.33%,成交额5519.04万元,换手率1.59%,总市值35.04亿元。...
蔚蓝生物涨0.23%,成交额6... 5月12日,蔚蓝生物涨0.23%,成交额6469.18万元,换手率1.98%,总市值32.82亿元。...
乐歌股份涨7.08%,成交额1... 5月12日,乐歌股份涨7.08%,成交额1.90亿元,换手率4.07%,总市值51.13亿元。异动分...
卫光生物跌0.32%,成交额5... 5月12日,卫光生物跌0.32%,成交额5961.16万元,换手率0.95%,总市值63.78亿元。...
优刻得涨2.22%,成交额3.... 5月12日,优刻得涨2.22%,成交额3.75亿元,换手率4.17%,总市值102.13亿元。异动分...
大胜达涨0.28%,成交额44... 5月12日,大胜达涨0.28%,成交额4481.78万元,换手率1.14%,总市值39.38亿元。异...
威唐工业涨2.96%,成交额7... 5月12日,威唐工业涨2.96%,成交额7702.71万元,换手率3.88%,总市值24.66亿元。...
派瑞股份涨1.41%,成交额6... 5月12日,派瑞股份涨1.41%,成交额6414.64万元,换手率2.42%,总市值46.02亿元。...
聚合顺涨1.36%,成交额47... 5月12日,聚合顺涨1.36%,成交额4798.17万元,换手率1.36%,总市值35.31亿元。资...
芯瑞达跌0.05%,成交额38... 5月12日,芯瑞达跌0.05%,成交额3887.29万元,换手率1.53%,总市值44.25亿元。异...
奥士康涨0.86%,成交额83... 5月12日,奥士康涨0.86%,成交额8328.49万元,换手率1.22%,总市值81.56亿元。异...
萃华珠宝跌1.92%,成交额6... 5月12日,萃华珠宝(维权)跌1.92%,成交额6175.31万元,换手率2.64%,总市值26.1...
HashKey MENA FZ... HashKey Group 宣布其子公司 HashKey MENA FZE 已获得迪拜虚拟资产监管局...
宁德时代涨3.52%,成交额7... 5月12日,宁德时代涨3.52%,成交额77.32亿元,换手率0.77%,总市值11316.72亿元...
成都燃气跌0.51%,成交额2... 5月12日,成都燃气跌0.51%,成交额2148.56万元,换手率0.25%,总市值86.22亿元。...