标签:分发 右边 ratings int res 135 左边 糖果
贪心
import java.util.Arrays;
class Solution {
public int candy(int[] ratings) {
/**
* 初始每个孩子一颗糖
*/
int[] res = new int[ratings.length];
Arrays.fill(res, 1);
/**
* 每个孩子都需要和自己左右的孩子进行比较来满足条件,但无法同时判断左右的大小
* 只能先从左到右遍历,使得每个孩子的右孩子都满足条件,只要右边比左边大,右边的糖果等于左边 + 1
* 然后从右到左遍历,使得每个孩子的左孩子满足条件,只要左边比右边大,左边的糖果应该取本身的糖果数(符合比它左边大) 和右边糖果数 + 1二者的最大值,这样才符合它比它左边的大,也比它右边大
*/
for (int i = 1; i < ratings.length; i++) {
if (ratings[i] > ratings[i - 1]){
res[i] = res[i - 1] + 1;
}
}
/**
* 因为右孩子已经满足条件了,在判断左孩子时,要取res[i + 1] + 1和res[i]的最大值,保证第i个小孩的糖果数量既大于左边也大于右边
*/
for (int i = ratings.length - 2; i >= 0; i--) {
if (ratings[i] > ratings[i + 1]){
res[i] = Math.max(res[i + 1] + 1, res[i]);
}
}
return Arrays.stream(res).sum();
}
}
/**
* 时间复杂度 O(n)
* 空间复杂度 O(1)
*/
https://leetcode-cn.com/problems/candy/
标签:分发,右边,ratings,int,res,135,左边,糖果 来源: https://www.cnblogs.com/taoyuann/p/15938939.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。