Candy
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?
Analysis:
For one child(in the middle of three children), there are four situations of relations with his neighbors.
- lower, higher, highest.
- lower, higher, lower
- higher,lower,higher
- highest,higher,lower
public class Solution {
public int candy(int[] ratings) {
int length = ratings.length;
if(length == 0){
return 0;
}else if(length == 1){
return 1;
}else if(length == 2){
if(ratings[0] == ratings[1]){
return 2;
}else{
return 3;
}
}
int[] numbers = new int[length];
for(int i = 0; i < length; i++){
numbers[i] = -10000;
}
if(ratings[0] <= ratings[1]){
numbers[0] = 1;
}
for(int i = 1; i < length - 1; i++){
if(ratings[i] < ratings[i -1] && ratings[i] <= ratings[i + 1]){
numbers[i] = 1;
}else if(ratings[i] > ratings[i - 1] && ratings[i] <= ratings[i + 1]){
numbers[i] = numbers[i -1] + 1;
}else if(ratings[i] == ratings[i - 1] && ratings[i] <= ratings[i + 1]){
numbers[i] = 1;
}
}
if(ratings[length - 1] <= ratings[length - 2]){
numbers[length - 1] = 1;
}else{
numbers[length - 1] = numbers[length -2] + 1;
}
for(int i = length - 2; i > 0; i--){
if(ratings[i] > ratings[i + 1] && ratings[i] > ratings[i - 1]){
if(numbers[i - 1] > numbers[i + 1]){
numbers[i] = numbers[i - 1] + 1;
}else{
numbers[i] = numbers[i + 1] + 1;
}
}else if(ratings[i] > ratings[i + 1] && ratings[i] <= ratings[i - 1]){
numbers[i] = numbers[i + 1] + 1;
}else if(ratings[i] == ratings[i + 1] && ratings[i] <= ratings[i - 1]){
numbers[i] = 1;
}
}
if(ratings[0] > ratings[1]){
numbers[0] = numbers[1] + 1;
}
int total = 0;
for(int i = 0; i < length; i++){
total += numbers[i];
}
return total;
}
}
文章来源:https://oj.leetcode.com/problems/candy/
1886



被折叠的 条评论
为什么被折叠?



