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

描述

一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:

1. 每个孩子不管得分多少,起码分到一个糖果。

2. 任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)

给定一个数组 arrarr 代表得分数组,请返回最少需要多少糖果。

要求: 时间复杂度为 O(n)O(n) 空间复杂度为 O(n)O(n)

数据范围: 1 \le n \le 1000001≤n≤100000 ,1 \le a_i \le 10001≤ai​≤1000

示例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;

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值