描述
一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下: 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,1import 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; } } 标签:count,得分,arr,le,int,最小化,bm95,糖果 From: https://www.cnblogs.com/somedieyoung/p/16709663.html