贪心算法:分配问题
只是记录自己的刷题过程,答案参考过多种题解。
如有错误感谢指正!
参考:LeetCode 101: A LeetCode Grinding Guide (C++ Version) 作者:高畅 Chang Gao
135.分发糖果 (Hard)
一群孩子站成一排,每一个孩子有自己的评分。现在需要给这些孩子发糖果,规则是如果一个孩子的评分比自己身旁的一个孩子要高,那么这个孩子就必须得到比身旁孩子更多的糖果;所有孩子至少要有一个糖果。求解最少需要多少个糖果。
A. 分发糖果的贪心思想
-
这道题在每次遍历中,一定要只考虑并更新 相邻一侧 的大小关系,再确定另一边。例如比较每一个孩子的右边,然后再比较左边,如果两边一起考虑一定会顾此失彼。
-
局部最优体现在,①一次是从左到右遍历,只比较右边孩子评分比左边大的情况;②一次是从右往左遍历,只比较左边孩子评分比右边大的情况。③这样保证第 i 个小孩的糖果数量即大于左边的也大于右边的。
-
全局最优体现在,①相邻的孩子中,评分高的右孩子获得比左边孩子更多的糖果;②