LeetCode: 135. Candy

LeetCode: 135. Candy

题目描述

There are N children standing in a line. Each child is assigned a rating value.
You are giving candies to these children subjected to the following requirements:

Each child must have at least one candy.
Children with a higher rating get more candies than their neighbors.
What is the minimum candies you must give?

Example 1:

Input: [1,0,2]
Output: 5
Explanation: You can allocate to the first, second and third child with 2, 1, 2 candies respectively.

Example 2:

Input: [1,2,2]
Output: 4
Explanation: You can allocate to the first, second and third child with 1, 2, 1 candies respectively.
             The third child gets 1 candy because it satisfies the above two conditions.

解题思路

虽然题目标签写的是 Hard,但实际上这道题并不难。
只需要根据相对大小关系,以最小的份额分配 candy 即可。也就是说某孩子拿到的糖果是左边孩子 rating 升序到该孩子的序号,和该孩子 rating 降序到最右边的最大值。

例如:rating 的相对大小如初始状态的分配

  • 初始状态

  • 首先一人一份糖果在手, 保证最小份额
  • 根据 rating 升序情况,给连续升序子序列的孩子分配最小份额,即升序的序号
  • 根据 rating 降序情况,给连续降序子序列的孩子分配最小份额,即降序倒数序号
  • 调整升序降序交界处的孩子糖果份额,取升/降序计算结果的较大值

AC 代码

class Solution 
{
public:
    int candy(vector<int>& ratings) 
    {
        vector<int> childrenCandy(ratings.size(), 1);

        // 升序
        for(size_t i = 1; i < ratings.size(); ++i)
        {
            if(ratings[i-1] < ratings[i])
            {
                childrenCandy[i] = childrenCandy[i-1]+1;
            }
        }

        // 降序
        for(size_t i = ratings.size()-1; i > 0; --i)
        {
            if(ratings[i-1] > ratings[i])
            {
                // 调整?
                childrenCandy[i-1] = max(childrenCandy[i-1], childrenCandy[i]+1);
            }
        }

        // 统计
        int count = 0;
        for(int candyNum : childrenCandy)
        {
            count += candyNum;
        }

        return count;
    }
};
全部评论

相关推荐

11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
Java抽象带篮子:难蚌,点进图片上面就是我的大头😆
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务