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

leetcode-135. Candy

2016-08-29 21:43 375 查看
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?

题意解析:

题目大概就是说有一群小孩,每个小孩有个得分,现在要给小孩子发糖,得分高的小孩应该比他旁边得分低的小孩得到的糖果要多,求问最少需要多少糖果。

最少的情况其实很简单,就是最低的人是1,比他高一点就+1,这道题难度是hard,可是我感觉只有easy,因为思路是直的,完全没拐弯,代码如下:

public class Solution {
public int candy(int[] ratings) {
if(ratings.length == 1){
return 1;
}
int[] candys = new int[ratings.length];
candys[0] = 1;
for(int i = 1; i < ratings.length; i++){
if(ratings[i] > ratings[i - 1]){
candys[i] = candys[i - 1] + 1;
}else{
candys[i] = 1;
}
}
for(int i = ratings.length - 2; i >= 0; i--){
if(ratings[i] > ratings[i + 1] && candys[i] <= candys[i + 1]){
candys[i] = candys[i + 1] + 1;
}
}
int sum = 0;
for(int x : candys){
sum += x;
}
return sum;
}
}

复杂度O(n),其实就是正向一次,反向一次。正向的时候默认是1,如果右边比左边高,就在原来的基础上+1,否则都是1。反向的时候,如果左边比右边高,而且左边糖果没有右边多,那左边的糖果就在右边的基础上+1。

结果也是在最快的那一组里面。别的算法我也想不到。不知道为什么有的人时间会那么慢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode java 题解