描述
一群孩子玩游戏,现在请根据游戏分数发糖果,要求如下:
- 不管每个孩子得分多少,至少得到一个糖果。
- 在两个相邻的孩子之间,得分较多的孩子必须多吃糖果。(如果是一样的,就没有限制) 给定一个数组 arrarr 代表得分数组,请返回最少需要多少糖果。 要求: 时间复杂度为 O(n)空间复杂度为 O(n) 数据范围:1≤n≤100000 , 1 ≤ a i ≤ 1000 1 \le a_i \le 1000 1≤ai≤1000
示例1 输入:[1,1,2] 返回值:4 说明:最佳分配方案为1、1、2
示例2 输入:[1,1,1] 返回值:3 说明:最佳分配方案是1、1、1
代码
class Solution {
public: /** * pick candy * @param arr int整型vector the array * @return int整型 */ int candy(vector<int>& arr) {
// write code here if(arr.size()==1) return 1; vector<int> dp(arr.size(),1); int min=0; for(int i=1;i<arr.size();i ){
if(arr[/span>i]>arr[i-1]) dp[i]=dp[i-1]+1; } for(int i=arr.size()-2;i>=0;i--){
if(arr[i]>arr[i+1]&&dp[i]<=dp[i+1]) dp[i]=dp[i+1]+1; } for(auto iter=dp.begin();iter<dp.end();iter++){
min+=*iter; } return min; } };