问题描述如下:
总结:遍历两边数组,从左到右一遍,从右到左一遍
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?
java代码如下:
package leetcode12.candy;
public class Solution {
public static void main(String []args){
int []ratings={1,2,3,3,3};
System.out.println(candy(ratings));
}
public static int candy(int []ratings){
int len=ratings.length;
if(ratings.length==0){
return 0;
}
int min=len;
int []candy=new int[len];
int cur=0;
for(int i=1;i<len;i++){
if(ratings[i]>ratings[i-1]){
cur++;
}else{
cur=0;
}
candy[i]=cur;
}
cur=0;
for(int i=len-2;i>=0;i--){
if(ratings[i]>ratings[i+1]){
cur++;
}else{
cur=0;
}
candy[i]=Math.max(candy[i], cur);
min+=candy[i];
}
min+=candy[len-1];
return min;
}
}
总结:遍历两边数组,从左到右一遍,从右到左一遍