分发糖果(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]这类似的数组就不行了,就不是最少的了。