【问题标题】:HackerRank Candies distributionHackerRank 糖果分布
【发布时间】:2016-08-24 00:52:02
【问题描述】:

问题陈述

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

输出包含 Alice 必须购买的最少糖果数量的单行。

HackerRank problem link

示例输入

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


【解决方案1】:

您的代码存在索引错误。 range 函数不包含最终索引。

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

应该是

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

例如:对于一个输入

3
2
1
1

当正确答案是 4 时,您的代码会输出 3

【讨论】:

    猜你喜欢
    • 2020-08-08
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多