问题陈述
爱丽丝想给她班上的孩子们一些糖果。所有的孩子都坐在一条线上(他们的位置是固定的),每个孩子都根据他或她在课堂上的表现得到评分。爱丽丝想给每个孩子至少1个糖果。如果两个孩子坐在一起,那么评分较高的孩子必须得到更多的糖果。爱丽丝想省钱,所以她需要尽量减少送给孩子们的糖果总数。输出一行,其中包含Alice必须购买的最少数量的糖果。
示例输入
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个元素,工作正常。有没有我失踪的角落?
答案 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
。