想要精通算法和SQL的成长之路 - 分发糖果
创始人
2024-01-25 04:57:33
0

想要精通算法和SQL的成长之路 - 分发糖果

  • 前言
  • 一. 分发糖果
    • 1.1 贪心法分析
    • 1.2 最终完整代码

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 分发糖果

原题链接

老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:

  • 每个孩子至少分配到 1 个糖果。
  • 相邻的孩子中,评分高的孩子必须获得更多的糖果。

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

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

1.1 贪心法分析

思路:我们用candy[i]代表这个孩子拥有的糖果数。初始化时,每个小朋友有一个糖果。

int[] candy = new int[ratings.length];
Arrays.fill(candy, 1);

先从左往右遍历:

  • 只考虑右侧评分大于左侧评分的孩子,给他多分一个糖果。(局部最优
  • 此时能保证,相邻的两个孩子,右侧孩子的糖果数一定 >= 左侧孩子的糖果数
  • 如果右侧孩子评分更高,那么他的糖果数应该是左侧孩子的糖果数candy[i] + 1
for (int i = 0; i < ratings.length - 1; i++) {// 右侧孩子评分比左侧孩子高if (ratings[i + 1] > ratings[i]) {candy[i + 1] = candy[i] + 1;}
}

再从右往左遍历:

  • 只考虑左侧评分大于右侧评分的孩子。那么此时需要保证左侧孩子的糖果数一定要保证比右侧大。(局部最优)

那么此时有两种可能:

  • 第一种:candy[i](左侧) < candy[i+1](右侧),那么左侧孩子的的糖果数应该是candy[i+1]+1
  • 第二种:candy[i](左侧) > candy[i+1](右侧),那么左侧孩子的的糖果数应该是candy[i]。因为已经满足条件了,不用再给他了。

总结就是candy[i] = Math.max(candy[i],candy[i+1]+1)

for (int i = ratings.length - 2; i >= 0; i--) {// 左侧孩子评分比右侧孩子高if (ratings[i] > ratings[i + 1]) {candy[i] = Math.max(candy[i], candy[i + 1] + 1);}
}

同时满足两个局部最优,那么最终结果就是全局最优了。

1.2 最终完整代码

public int candy(int[] ratings) {int[] candy = new int[ratings.length];// 初始化糖果,让每个孩子都至少有1个。Arrays.fill(candy, 1);// 第一次从左往右遍历for (int i = 0; i < ratings.length - 1; i++) {// 右侧孩子评分比左侧孩子高if (ratings[i + 1] > ratings[i]) {candy[i + 1] = candy[i] + 1;}}// 第二次从右往左遍历for (int i = ratings.length - 2; i >= 0; i--) {// 左侧孩子评分比右侧孩子高if (ratings[i] > ratings[i + 1]) {candy[i] = Math.max(candy[i], candy[i + 1] + 1);}}return Arrays.stream(candy).sum();
}

相关内容

热门资讯

蜜蜂的种类,蜜蜂生活在哪里 蜜...   蜜蜂是一种群居的昆虫。现在很多农民会养蜜蜂采蜜。一方面,他们可以靠蜂蜜赚钱;另一方面,他们改进了...
2019年大学生创业项目,大学...   我们首先要知道什么是创业,所谓创业是指创业,即有一定目标和规模的对社会发展有影响的有规律的活动,...
创新创业基础课程,创新创业设计...           
肉团团购东西是正品吗,肉团团购...         每年春节前,我都会做一份喜庆的生肖小吃,迎接新年。今年是狗年,当然也少不了旺狗。狗是...
为什么有人有前世记忆 涓轰粈涔...         几乎每个人都有这种经历;往往在某个瞬间,觉得看到的场景或人很熟悉,很熟悉。这是梦里留...
卖旗袍的技巧和方法,一分钟卖4...   70岁的画家余孝义非常擅长画穿着旗袍的东方女性。在他的作品中,旗袍成了衬托女性美的重要服装。  ...
男人40岁离婚了创业能做什么 ...   引线:      世界上最难的事情是有家却享受不到家的温暖,为自己犯下的错误买单。与其说我有家庭...
画像报告是什么意思,创业者自画...   除了送餐,很多外卖小哥都是“绝技”,是“斜杠青年”。5月6日,郑州饿骑士王新洲新作——《春暖花开...
干事创业不够有力 干事创业不够...           
室内装修创业计划书 室内装修创...   一看就是她的家!一家三口搬进这个135的房子,自己创业,自己装修。他们喜欢韩国人的清新和日本人的...