LeetCode135. 分发糖果(贪心算法)
创始人
2024-02-12 12:54:44
0

1 题目描述

n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:

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

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

2 算法设计

这道题目最好从一边开始考虑,如果两边同时考虑的话容易出错。
(1)先按照从左到右的顺序遍历数组ratings,确定右边评分大于左边的情况。
局部最优: 只要右边评分比左边评分高,右边就比左边多一个糖果。
全局最优: 相邻的孩子中,评分高的右孩子比左孩子获得更多的糖果。
(2)再按照从右到左的顺序遍历数组ratings,确定左边评分大于右边评分的情况。
局部最优: 只要左边评分比右边评分高,左边的孩子就比右边的孩子多一个糖果。
全局最优: 相邻的孩子中,评分高的左孩子比右孩子获得更多的糖果。

3 代码实现

 public static int candy(int[] ratings) {int[] candy = new int[ratings.length];Arrays.fill(candy,1); //所有的孩子至少有一个糖果//从左向右遍历,使得相邻孩子中,评分高的右孩子获得比左孩子更多的糖果for(int i=1;i< ratings.length;i++){candy[i] = ratings[i] > ratings[i-1] ? candy[i-1]+1:candy[i];}//从右向左遍历,确定左边大于右边的情况for (int j=ratings.length-2;j>=0;j--){if (ratings[j] > ratings[j+1]){if (candy[j] <= candy[j+1]){candy[j] = candy[j+1]+1;}}}return  Arrays.stream(candy).sum();}

4 测试结果

在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...