0
点赞
收藏
分享

微信扫一扫

218.贪心算法:分发糖果(力扣)

心智的年轮 2024-07-24 阅读 10

核心思想

  1. 初始化每个学生的糖果数为1
    • 确保每个学生至少有一颗糖果。
  2. 从左到右遍历
    • 如果当前学生的评分高于前一个学生,则当前学生的糖果数应比前一个学生多一颗。
  3. 从右到左遍历
    • 如果当前学生的评分高于后一个学生,则当前学生的糖果数应比后一个学生多一颗。
    • 同时确保当前学生的糖果数不小于先前分配的糖果数(在从左到右遍历时确定的)。
  4. 计算糖果总数
    • 累加每个学生的糖果数,得到最终的总数。

代码解决

class Solution {
public:
    int candy(vector<int>& ratings) 
    {
        int result = 0;
        vector<int> candyNum(ratings.size(), 1); // 初始化每个学生的糖果数为1

        // 从左到右遍历,确保评分高的学生比前一个学生得到更多的糖果
        for (int i = 1; i < ratings.size(); i++)
        {
            if (ratings[i] > ratings[i - 1])
            {
                candyNum[i] = candyNum[i - 1] + 1;
            }
        }

        // 从右到左遍历,确保评分高的学生比后一个学生得到更多的糖果
        for (int i = ratings.size() - 2; i >= 0; i--)
        {
            if (ratings[i] > ratings[i + 1])
            {
                candyNum[i] = max(candyNum[i + 1] + 1, candyNum[i]);
            }
        }

        // 计算糖果总数
        for (int num : candyNum)
        {
            result += num;
        }

        return result;
    }
};
举报

相关推荐

0 条评论