您的位置:首页 > 编程语言 > Java开发

[LeetCode] Candy

2014-09-25 23:15 330 查看
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?

通过分析,我们可以发现:无外乎就是3种情况:举例来说

(1) rating[0]>rating[1]  如果 candy[0]<=candy[1] candy[0]=candy[1]+1;

(1) rating[0]=rating[1] 不用管,继续走

(1) rating[0]<rating[1]
如果 candy[0]>=candy[1] candy[1]=candy[0]+1;

正的走一遍,我们只考虑i和i+1的关系,也就是child和他右边孩子的糖果数量

反过来扫一遍, 我们只考虑 i 和i-1的关系,child和他左边孩子的糖果数量

这样每一个child的左右就都满足了。一次通过

public int candy(int[] ratings) {
int n=ratings.length;
int[] c= new int
;
Arrays.fill(c,1);
for(int i=0;i<n-1;i++){
if(ratings[i]>ratings[i+1] && c[i]<=c[i+1]){
c[i]=c[i+1]+1;
} else if(ratings[i]<ratings[i+1] && c[i]>=c[i+1]){
c[i+1]=c[i]+1;
}
}

for(int i=n-1;i>=1;i--){
if(ratings[i]>ratings[i-1] && c[i]<c[i-1]){
c[i]=c[i-1]+1;
} else if(ratings[i]<ratings[i-1] && c[i-1]<=c[i]){
c[i-1]=c[i]+1;
}
}

int sum=0;
for(int candy: c){
sum+=candy;
}

return sum;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode java