bm95最小化奖励问题(分糖果问题)

描述

一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:
 
1. 每个孩子不管得分多少,起码分到一个糖果。
2. 任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)
 
给定一个数组 arrarr 代表得分数组,请返回最少需要多少糖果。
 
要求: 时间复杂度为 O(n)O(n) 空间复杂度为 O(n)O(n)
 
数据范围: 1 \le n \le 1000001n100000 ,1 \le a_i \le 10001ai1000
 

示例1

输入:
[1,1,2]
返回值:
4
说明:
最优分配方案为1,1,2  

示例2

输入:
[1,1,1]
返回值:
3
说明:
最优分配方案是1,1,1  
import java.util.*;
public class Solution {
    public int minOfAward(int[] arr){
    int[] count=new int[arr.length];
    Arrays.fill(arr,1);
    int sum=0;
    for(int i=1;i<arr.length;i++){
        if(arr[i-1]<arr[i])
        count[i]=count[i-1]+1;
    } 
    for(int j=arr.length-1;j>0;j--){
        if(arr[j]<arr[j-1])
        count[j-1]=Math.max.(count[j]+1,count[j]-1);
    }
    for(int i:count)
    sum+=i;
    return sum;
    }
}

posted on 2022-09-20 00:21  somedieyoung-navi  阅读(29)  评论(0编辑  收藏  举报