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?
题目链接:https://leetcode.com/problems/candy/
题目分析:先从左到右贪心构造,根据rating的大小尽可能少的发糖,然后从右向左修正一下即可
public class Solution {
public int candy(int[] ratings) {
int len = ratings.length;
if (len < 2) {
return len;
}
int[] candy = new int[len + 1];
candy[0] = 1;
for (int i = 1; i < len; i ++) {
if (ratings[i] > ratings[i - 1]) {
candy[i] = candy[i - 1] + 1;
}
else if (candy[i] == candy[i - 1]){
candy[i] = candy[i - 1];
}
else {
candy[i] = 1;
}
}
int ans = 0;
for (int i = len - 1; i > 0; i --) {
if (candy[i] >= candy[i - 1] && ratings[i] < ratings[i - 1]) {
candy[i - 1] = Math.max(candy[i - 1], candy[i] + 1);
}
ans += candy[i];
}
return ans + candy[0];
}
}