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

/**
 * @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;

}


}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值