135. Candy
2018-04-07 本文已影响11人
衣介书生
题目分析
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?
可以用贪心算法来解出这道题目。
代码
public class Solution {
public int candy(int[] ratings) {
if(ratings == null || ratings.length == 0) {
return 0;
}
if(ratings.length == 1) {
return 1;
}
int sum = 0;
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;
}
}
sum += candys[candys.length - 1];
for(int i = ratings.length - 2; i >= 0; i--) {
// 如果当前孩子的等级比右边的孩子高
if(ratings[i] > ratings[i + 1]) {
candys[i] = Math.max(candys[i], candys[i + 1] + 1);
}
sum += candys[i];
}
return sum;
}
}