题目:
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?
//题意:N个孩子站成一排,每个孩子分配一个分值。给这些孩子派发糖果,满足如下要求:
//每个孩子至少一个
//分值更高的孩子比他的相邻位的孩子获得更多的糖果
//求至少分发多少糖果?
import java.util.*;
public class Solution {
public int candy(int[] ratings) {
if (ratings==null||ratings.length==0)
{return 0;}
int n = ratings.length;
int[] v = new int[n];
int sum =0;
//初始,每个孩子至少有一颗糖
Arrays.fill(v,1);
//从左向右扫描,分值大的增加一个糖果
for(int i=1;i<n;i++){
if(ratings[i]>ratings[i-1])
{v[i]=v[i-1]+1;}
}
//从右向左扫描,分值大的多一个糖果
for(int i=n-1;i>0;i--){
if(ratings[i]<ratings[i-1]&&v[i]>=v[i-1])
{
v[i-1]=v[i]+1;
}
sum+=v[i];
}
sum +=v[0];
return sum;
}
}