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