Advertisement

用贪心算法分发糖果

阅读量:

135. 分发糖果

题目描述:

一群儿童排成一行,每个儿童都有对应的评分。现在需要向这些儿童分发糖果,其规则为:若某位儿童的评分高于其相邻的一位儿童,则该儿童应获得比邻座儿童更多的糖果;同时,所有儿童至少需获得一颗糖果。请计算最少需要准备多少颗糖果。

示例 1:

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

示例 2:

输入:[1,2,2]
输出:4
解释:可分别给这三个孩子分配 1、2、1 颗糖果。第三个孩子仅获得 1 颗糖果,这已符合上述两个条件。

解析:

1、仅需进行两次简单的遍历操作即可完成:

将每个孩子的初始糖果数量 num[] 设置为 1,首先从左至右进行一次遍历,若右侧孩子的评分高于左侧,则将右侧孩子的糖果数设置为左侧孩子糖果数加 1;

接着再从右至左进行一次遍历,若左侧孩子的评分高于右侧,并且左侧孩子的当前糖果数不大于右侧的,则将其更新为右侧孩子糖果数加 1;否则不作调整。

2、在此过程中所采用的贪心策略是:在每次遍历时,仅关注并处理单侧相邻之间的大小关系。

复制代码
 class Solution {

    
 public:
    
     int candy(vector<int>& ratings) {
    
     int len = rat

全部评论 (0)

还没有任何评论哟~