赞
踩
n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
1 个糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
示例 1:
输入:ratings = [1,0,2] 输出:5 解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。
示例 2:
输入:ratings = [1,2,2]
输出:4
解释:你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。
第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。
个人分析
这个题目要求ratings高的孩子分的糖果多,如果我们只从左到右遍历一遍,会导致最终的结果并不是答案,所以我们需要考虑两头的情况,还需要从右往左再遍历一遍
题解代码
- class Solution {
- public:
- int candy(vector<int>& ratings) {
- int n = ratings.size();
- vector<int> candy(n, 1);
- for(int i = 1; i < n; i++)
- {
- if(ratings[i] > ratings[i - 1])
- {
- candy[i] = candy[i - 1] + 1;
- }
- }
- for(int i = n - 2; i >= 0; i--)
- {
- if(ratings[i] > ratings[i + 1])
- {
- candy[i] = max(candy[i], candy[i + 1] + 1);
- }
- }
- int ans = 0;
- for(int i = 0; i < n; i++)
- {
- cout << candy[i] << " ";
- ans = ans + candy[i];
- }
- return ans;
-
- }
- };

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。