校招真题练习011 种花(美团)
生活随笔
收集整理的這篇文章主要介紹了
校招真题练习011 种花(美团)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
種花
題目描述
公園里有N個花園,初始時每個花園里都沒有種花,園丁將花園從1到N編號并計劃在編號為i的花園里恰好種A_i朵花,他每天會選擇一個區間[L,R](1≤L≤R≤N)并在編號為L到R的花園里各種一朵花,那么園丁至少要花多少天才能完成計劃?
輸入描述:
第一行包含一個整數N,1≤N≤10^5。
第二行包含N個空格隔開的整數A_1到A_N,0≤A_i≤10^4。
輸出描述:
輸出完成計劃所需的最少天數。
思路一:貪心法(AC)
1 if __name__ == '__main__': 2 N = int(input()) 3 ary = list(map(int,input().strip().split())) 4 cnt = 0 5 for i in range(1,N): 6 if ary[i-1] > ary[i]: 7 cnt += ary[i-1] - ary[i] 8 print(cnt + ary[N-1])?
思路二:分治法(只能通過60%)
1 def findMinIndex(ary): 2 minValue = sys.maxsize 3 minIndex = -1 4 for i in range(len(ary)): 5 if ary[i] < minValue: 6 minValue = ary[i] 7 minIndex = i 8 for i in range(len(ary)): 9 ary[i] -= minValue 10 return ary,minIndex,minValue 11 12 def calFlowers(ary,L,R): 13 if L == R: 14 return ary[L] 15 elif L < R: 16 ary2,minI,minV = findMinIndex(ary[L:R+1]) 17 left = calFlowers(ary2,0,minI-1) 18 right = calFlowers(ary2,minI+1,len(ary2)-1) 19 return left + right + minV 20 else: 21 return 0 22 23 if __name__ == '__main__': 24 N = int(input()) 25 ary = list(map(int,input().strip().split())) 26 27 result = calFlowers(ary,0,N-1) 28 print(result)?
轉載于:https://www.cnblogs.com/asenyang/p/11100600.html
總結
以上是生活随笔為你收集整理的校招真题练习011 种花(美团)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python去噪算法
- 下一篇: 我为什么更喜欢 Mac OS X