题目描述:
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)做法