赞
踩
题型:数组、贪心
链接:
来源:LeetCode
n
个孩子站成一排。给你一个整数数组 ratings
表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
1
个糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
贪心,在左边的孩子满足【规则】的条件下,让右边的孩子也满足【规则】
- class Solution {
- public:
- int candy(vector<int>& ratings) {
- // 让点满足两个条件:下一个比自己大的,比自己多一个糖,从左边和右边分别进行遍历
- vector<int> candyLeft(ratings.size(),1);//从左向右遍历
- vector<int>candyRight(ratings.size(),1);//从右向左遍历
- // 左遍历完
- for(int i=0;i<ratings.size()-1;++i)
- {
- if(ratings[i] < ratings[i+1])
- candyLeft[i+1] = candyLeft[i] + 1;
- }
- // 右边遍历完
- for(int i=ratings.size()-1;i>0;--i)
- {
- if(ratings[i-1] > ratings[i])
- candyRight[i-1] = candyRight[i] + 1;
- }
- int sum = 0;
- for(int i=0;i<ratings.size();i++)
- sum += max(candyLeft[i],candyRight[i]);
- return sum;
- }
- };

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