题目链接:candy
import java.util.Arrays;
/**
*
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 Candy {
// 27 / 27 test cases passed.
// Status: Accepted
// Runtime: 252 ms
// Submitted: 0 minutes ago
//时间复杂度O(n) 空间复杂度O(n)
public int candy(int[] ratings) {
int sum = 0;
int candies[] = new int[ratings.length]; //纪录每个孩子得到的糖果数
Arrays.fill(candies, 1);
int increment = 2; //纪录连续递增数的个数
//正序 递增
for (int i = 1; i < ratings.length; i++) {
if (ratings[i] > ratings[i - 1]) {
candies[i] = Math.max(increment ++, candies[i]);
} else {
increment = 2;
}
}
//逆序 递增
for (int i = ratings.length - 2; i >= 0; i --) {
if(ratings[i] > ratings[i + 1]) {
candies[i] = Math.max(increment ++, candies[i]);
} else {
increment = 2;
}
}
//计算总和
for (int i = 0; i < ratings.length; i ++) {
sum += candies[i];
}
return sum;
}
public static void main(String[] args) {
}
}