当前位置:   article > 正文

力扣LeetCode:135. 分发糖果(贪心算法)_分发奖品leetcode

分发奖品leetcode

n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。

你需要按照以下要求,给这些孩子分发糖果:

  • 每个孩子至少分配到 1 个糖果。
  • 相邻两个孩子评分更高的孩子会获得更多的糖果。

请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

示例 1:

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

示例 2:

输入:ratings = [1,2,2]
输出:4
解释:你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。
     第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。


个人分析

这个题目要求ratings高的孩子分的糖果多,如果我们只从左到右遍历一遍,会导致最终的结果并不是答案,所以我们需要考虑两头的情况,还需要从右往左再遍历一遍

题解代码

  1. class Solution {
  2. public:
  3. int candy(vector<int>& ratings) {
  4. int n = ratings.size();
  5. vector<int> candy(n, 1);
  6. for(int i = 1; i < n; i++)
  7. {
  8. if(ratings[i] > ratings[i - 1])
  9. {
  10. candy[i] = candy[i - 1] + 1;
  11. }
  12. }
  13. for(int i = n - 2; i >= 0; i--)
  14. {
  15. if(ratings[i] > ratings[i + 1])
  16. {
  17. candy[i] = max(candy[i], candy[i + 1] + 1);
  18. }
  19. }
  20. int ans = 0;
  21. for(int i = 0; i < n; i++)
  22. {
  23. cout << candy[i] << " ";
  24. ans = ans + candy[i];
  25. }
  26. return ans;
  27. }
  28. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/49540
推荐阅读
相关标签
  

闽ICP备14008679号