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.
解题思路:
1. 对于ratings[i], ratings[i]的数目的大小,取决于ratings[i-1], ratings[i+1]和ratings[i]的大小对比。我们可以简化为,ratings[i-1] vs ratings[i] 或者ratings[i+1] vs ratings[i].
从左到右扫描数组,candies[i] = candies[i-1] + 1 if ratisngs[i] > ratings[i-1]
然后第二遍,从右到左,candies[i-1] = candies[i] + 1 if ratings[i-1] > ratisngs[i]
第二遍,要注意在ratings[i-1] > ratings[i] and candies[i-1] > candies[i], 就不需要更改了candies了。
public int candy(int[] ratings) {
int n = ratings.length;
if(n == 0) return 0;
int[] candies = new int[n];
int total = 0;
candies[0] = 1;
for(int i = 1; i < ratings.length; i++){
if(ratings[i] > ratings[i-1]){
candies[i] = candies[i-1] + 1;
}else{
candies[i] = 1;
}
}
total = candies[n - 1];
for(int i = ratings.length - 1; i > 0 ; i--){
if(ratings[i] < ratings[i-1] && candies[i] >= candies[i-1]){
candies[i-1] = candies[i] + 1;
}
total += candies[i-1];
}
return total;
}
No comments:
Post a Comment