LeetCode 0135 Candy
作者:互联网
1. 题目描述
2. Solution 1
1、思路分析
可以将“Children with a higher rating get more candies than their neigbors”(相邻的孩子中,评分高的孩子必须获得更多的糖果)拆分为两个原则,分别处理。左规则: 当ratings[i-1] < ratings[i]时,i号学生的糖果数量将比i-1号孩子的糖果数量多。右规则: 当ratings[i] > ratings[i+1]时,i号学生的糖果数量将比i+1号孩子的糖果数量多。
遍历该数组两次,处理出每一个学生分别满足左规则或右规则时,最少需要被分得的糖果数量。每个人最终分得的糖果数量即为这两个数量的最大值。
2、代码实现
package Q0199.Q0135Candy;
import java.util.Arrays;
public class Solution {
public int candy(int[] ratings) {
int n = ratings.length;
int[] res = new int[n];
Arrays.fill(res, 1);
for (int i = 1; i < n; i++) {
if (ratings[i] > ratings[i - 1])
res[i] = res[i - 1] + 1;
}
for (int i = n - 1; i > 0; i--) {
if (ratings[i - 1] > ratings[i])
res[i - 1] = Math.max(res[i] + 1, res[i - 1]);
}
int sum = 0;
for (int r : res) sum += r;
return sum;
}
}
3、复杂度分析
时间复杂度: O(n)
空间复杂度: O(n)
标签:0135,ratings,int,res,复杂度,Candy,数量,糖果,LeetCode 来源: https://www.cnblogs.com/junstat/p/16294357.html