这是一个黑客问题:爱丽丝是一名幼儿园老师。她想给她班上的孩子们一些糖果。所有的孩子都坐在一条线上(他们的位置是固定的),每个孩子都根据他或她在课堂上的表现得到评分。爱丽丝想给每个孩子至少1个糖果。如果两个孩子坐在一起,那么评分较高的孩子必须得到更多的糖果。爱丽丝想省钱,所以她需要尽量减少送给孩子们的糖果总数。
n = int(input())
candies = 1
candy = 1
temp = int(input())
for i in range(1,n):
temp1 = int(input())
if (temp1>temp):
candy = candy + 1
else:
candy = 1
temp = temp1
candies = candies+candy
print candy
print candies
测试数组:n = 10,n个元素是[ 2 4 2 6 1 7 8 9 2 1]。我得到18作为答案,而19是正确的答案。我正在做一些我无法捕捉到的错误。
的链接答案 0 :(得分:2)
像这样修改你的代码。您只是从左方向迭代,但也应检查右邻居。也从右边运行相同的循环并取这两个值的最大值。这应该是你的新糖果任务。
n = int(input())
candy = 1
temp = int(input())
list =[]
rating =[]
rating.append(temp)
list.append(candy)
for i in range(1,n):
temp1 = int(input())
rating.append(temp1)
if (temp1>temp):
candy = candy + 1
else:
candy = 1
list.append(candy)
temp = temp1
rating= rating[::-1]
list = list[::-1]
temp = rating[0]
candies =list[0]
for i in range(1,n):
temp1 = rating[i]
if (temp1>temp):
list[i]= max(list[i-1]+1,list[i])
candies =candies+list[i]
temp = temp1
print candies
答案 1 :(得分:1)
n = input()
a = [input() for _ in xrange(n)]
//min. candies he has to give
candies = [1] * n
for i in xrange(1, n):
if a[i] > a[i-1]:
candies[i] = candies[i-1] + 1
for i in xrange(n-2, -1, -1):
if a[i] > a[i+1]:
candies[i] = max(candies[i], candies[i+1] + 1)
print sum(candies)
这就是我这样做的方式,给每个孩子开一个糖果。