【发布时间】:2016-08-24 00:52:02
【问题描述】:
问题陈述
爱丽丝想给她班上的孩子一些糖果。所有的孩子排成一排(他们的位置是固定的),每个孩子都根据他或她在课堂上的表现打分。 Alice 想给每个孩子至少 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 测试用例。这是一个示例input。对于上述输入,输出应为33556
但我的输出是33555,并且在所有4 个失败的测试用例中,我的输出与1 的预期输出不同。我用笔和纸尝试了 15 个元素,效果很好。有没有我遗漏的角落案例?
【问题讨论】:
-
这是一个很好的答案。我的方法比这复杂得多。感谢您发布此内容。
标签: algorithm performance python-3.x optimization dynamic-programming