弱爆了的Candies

题目出处

题目描述:

n个小朋友坐成一排,每个小朋友有一个数表示他的表现(数字越大表现越好)。老师要给每个小朋友发至少1颗糖,相邻的两个小朋友,得分较高的小朋友必须得到更多的糖,问:老师至少需要给出多少颗糖

我的解法:

开两个数组c,c1。分别表示到这个数字的连续上升的序列长度,和连续下降的长度,那么发给第i个小朋友的糖果数量就是max(c[i],c1[i])

因此有挫逼代码如下:

 1 def Solve():
 2     n = int(input())
 3     l = []
 4     for i in range(n):
 5         x = int(input())
 6         l.append(x)
 7     c = [1 for i in range(0,n)]
 8     for i in range(1,n):
 9         if ( l[i] > l[i-1] ):
10             c[i] = c[i-1]+1
11     c1 = [1 for i in range(0,n)]
12     i = n-2
13     while ( i >= 0 ):
14         if ( l[i] > l[i+1] ):
15             c1[i] = c1[i+1]+1
16         i -= 1
17     ans = 0
18     for i in range(n):
19         if ( c[i] > c1[i] ):
20             ans += c[i]
21         else:
22             ans += c1[i]
23     print(ans)
24 
25 Solve()
弱爆了

坐等空间复杂的o(1)做法

原文地址:https://www.cnblogs.com/qoshi/p/3333424.html