【孩子分糖 Candy problems】可行解3-leecode-OJ

本文介绍了一种用于解决糖果分配问题的独特算法。该算法通过遍历数组并根据相邻元素的大小关系来确定每个孩子应该获得的糖果数量,从而确保满足题目要求:相同评分的孩子获得相同数量的糖果,评分较高的孩子至少比相邻的评分较低的孩子多获得一颗糖果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * @author Eul_82
 */
public class Solution {
public int candy(int[] ratings) {
int pre=0;//波峰的前一个糖果数
int count=0;//糖果总数
int cur=1;//下一个糖果数
int v=0;//波峰是波谷的后一个糖果数时,标记v=2,否则v=0
final int len=ratings.length;
for(int i=0;i<len;i++){
//System.out.print(cur+",");
count+=cur;
if(i<len-1 &&ratings[i]==ratings[i+1]){//权重相等
pre=0;
cur=1;
v=0;
continue;
}
if(i<len-2 && ratings[i+1]>ratings[i] && ratings[i+1]>ratings[i+2]){//波峰
pre=cur;
if(v==2){//当前权重是波峰,且前一个权重是波谷
pre=1;
v=0;
}
cur=0;
}
if(v==2){//当前权重非波峰,且前一个权重是波谷
cur=1;
v=0;

if(i<len-2 &&(ratings[i+1]<ratings[i] && ratings[i+1]<=ratings[i+2])|| (i==len-2 && ratings[i]>ratings[i+1])){//波谷或数尾
cur=pre>=cur?pre:cur;
v=2;
}
cur++;
}
return count;

}


}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值