HackerRank糖果分销

时间:2016-08-23 16:29:38

标签: algorithm performance python-3.x optimization dynamic-programming

问题陈述

爱丽丝想给她班上的孩子们一些糖果。所有的孩子都坐在一条线上(他们的位置是固定的),每个孩子都根据他或她在课堂上的表现得到评分。爱丽丝想给每个孩子至少1个糖果。如果两个孩子坐在一起,那么评分较高的孩子必须得到更多的糖果。爱丽丝想省钱,所以她需要尽量减少送给孩子们的糖果总数。

输出一行,其中包含Alice必须购买的最少数量的糖果。

numpy.vstack

示例输入

3  (no of students )
1  (individual scores)
2  
2

示例输出

4

我的解决方案

arr = []
for i in range(int(input())):
    arr.append(int(input()))

# candy left to right, candy right to left, and candy array
candy_lr = [1]*(len(arr))
candy_rl = [1]*(len(arr))
candy = []

# traverses from left to right and assigns candy to students
for i in range(1,len(arr)):
    if arr[i]>arr[i-1]:
        candy_lr[i] = candy_lr[i-1]+1

# traverses from right to left and assigns candy to students        
for i in range(len(arr)-2,0,-1):
    if arr[i]>arr[i+1]:
        candy_rl[i] = candy_rl[i+1]+1   

#calculates the total candy needed
for i in range(0,len(arr)):
    candy.append(max(candy_lr[i],candy_rl[i]))
print(sum(candy))

但是,此解决方案仅传递11/15个测试用例。这是一个样本HackerRank problem link。对于上面的输入,输出应为33556 但是我的输出是33555,在所有4个失败的测试用例中,我的输出与1的预期输出不同。我用笔和纸试了15个元素,工作正常。有没有我失踪的角落?

1 个答案:

答案 0 :(得分:1)

您的代码有索引错误。范围函数不包括最终索引。

for i in range(len(arr)-2,0,-1):

应该是

for i in range(len(arr)-2,-1,-1):

例如:输入

3
2
1
1
当正确答案为3时,

您的代码会输出4