/*
描述
一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:
1. 每个孩子不管得分多少,起码分到一个糖果。
2. 任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)
给定一个数组 arrarr 代表得分数组,请返回最少需要多少糖果。
要求: 时间复杂度为 O(n)O(n) 空间复杂度为 O(n)O(n)
解法1:左右各遍历一次
把所有孩子的糖果数初始化为 1;
先从左往右遍历一遍,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的 糖果数加 1;
再从右往左遍历一遍,如果左边孩子的评分比右边的高,且左边孩子当前的糖果数不大于右边孩子的糖果数,
则左边孩子的糖果数更新为右边孩子的糖果数加 1。
通过这两次遍历, 分配的糖果就可以满足题目要求了
左右各遍历一次
*/
*/
int candy(vector<int>& arr) {
// write code here
int now = 0;
int m = 0;
int ans = 0;
vector<int> tmp(arr.size() ,1);
int count=0;
for(int i=1;i<arr.size();i++){
if(arr[i]>arr[i-1]){
tmp[i]=tmp[i-1]+1;
}
}
for(int i=arr.size()-1;i>0;i--){
if(arr[i-1]>arr[i]){
tmp[i-1]=max(tmp[i-1],tmp[i]+1);
}
}
for(int i:tmp)
count+=i;
return count;
}
BM95 分糖果问题
最新推荐文章于 2022-10-07 16:13:09 发布