您的位置:首页 > 其它

LeetCode 解题报告 Candy

2014-11-13 09:27 495 查看
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?

分析:

今年在做4399的笔试题的时候,遇到了这个题,当时没有一点思路。

这次再拿到这个题的时候还是没有什么思路,但感觉应该是动态规划的题,后来在网上看了解题报告之后,证实了我的猜想,虽然对动态规划有所了解 ,但如果真的让自己从头到尾的把题想出来,做出来,真的是有难度

下面就说说这个题的思路吧

要求每人至少一个,但临近的人并且比别人高,所拿到的糖就要多

首先用一个数组来保存每一个位置的大小,从左右两边遍历,如果后一个比前一个大,num[i] = max(inc++,num[i]);

public class Candy {
public int candy(int[] ratings) {
int [] num = new int[ratings.length];
int result =ratings.length;
for(int i=1,inc = 1;i<ratings.length;i++){
if(ratings[i] > ratings[i-1]){
num[i] = Math.max(num[i],inc++);
}
else
inc = 1;
}
for(int i = ratings.length-2,inc = 1;i>=0;i--){
if(ratings[i] > ratings[i+1])
num[i] = Math.max(inc++, num[i]);
else
inc = 1;
}
for(int i=0;i<ratings.length;i++){
result += num[i];
}
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: