算法打卡十九

分发糖果(c++):

法一(两次遍历):表示数组长度n,设出一新数组left。for循环从原数组的左边开始第一次遍历(即左规则),将新数组left初元素为1。接着,if判断原数组若后一个(i)元素大于前一个(i-1)元素,则新数组的后一元素比前一元素多得一个糖果(left[i]=left[i-1]+1);否则,left[i]=1。循环结束,完成第一次遍历。for循环从原数组右边开始第二次遍历(即右规则),设出一新糖果数right=0来表示原数组每个元素应得的糖果数(从右边开始);如上述左规则般,右规则的初糖果数为1,接着if判断若原数组前一个元素(i)大于后一个元素(i-1),则前一糖果数比后一糖果数多一个,否则right=1。然后,依据左规则和右规则找出每个元素所得的最大糖果数(因为,要符合两边规则,选较大的才行),最后求和,即得最小糖果数。

我:看题,最少的糖果数sum也就是数组的长度n了,然后for循环再依据它们前后比较,凡是有差值的,最小糖果数就加一。最后循环结束,返回sum数值即可。但并不对,若是[1,3,2,2,1]这类似的数组就不行了,就不是最少的了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值