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?
解题思路:
双向爬坡问题,从前往后、从后往前各扫一遍,JAVA实现如下:
public int candy(int[] ratings) { int sum = 0; int[] candies = new int[ratings.length]; for (int i = 0; i < ratings.length - 1; i++) if (ratings[i] < ratings[i + 1]) candies[i + 1] = candies[i] + 1; for (int i = ratings.length - 2; i >= 0; i--) if (ratings[i + 1] < ratings[i]) candies[i] = Math.max(candies[i], candies[i + 1] + 1); for (int i = 0; i < candies.length; i++) sum += 1 + candies[i]; return sum; }
时间: 2024-11-07 17:03:49