There are N children standing in a line. Each child is assigned a rating value.
You are giving candies to these children subjected to the following requirements:
- Each child must have at least one candy.
- Children with a higher rating get more candies than their neighbors.
What is the minimum candies you must give?
分析:首先从头开始遍历:依次更新从小到大的序列,然后再从后往前遍历一遍,依次更新递减的值;
<span style="font-size:14px;">public class Solution {
public int candy(int[] ratings) {
int n=ratings.length;
int sum=0;
int[] num=new int[n];
for(int i=1;i<n;i++){
if(ratings[i]>ratings[i-1])
num[i]=num[i-1]+1;
}
for(int i=n-2;i>=0;i--){
if(ratings[i]>ratings[i+1])
num[i]=num[i]>(num[i+1]+1)?num[i]:(num[i+1]+1);
}
for(int i=0;i<n;i++)
sum+=num[i]+1;
return sum;
}
}</span>