題目描述:
第一行 n (n<1000)
第二行n個數, 表示n個人入公司的年限.發工資的規則是這樣的, 入職年限高的比入職年限低的工資高, 但所幸的是每一個人只會知道身邊兩人的工資情況.
問滿足此情況的最少工資數.
樣例:
輸入1
4
1 2 3 2
輸出1
700 (100, 200, 300)
輸入2
6
1 3 3 3 2 1
輸出2:
1300(100, 300, 300, 200, 100)
事實證明我的想法是錯誤的...哭了...
1 3 3 2 1 是這樣的 (100,200,300,200,100)
相同之間並沒有什么關系啊 這是leetcode上面一道原題: 135. 分發糖果
核心: leetcode題解分別從左到右掃描一遍, 從右到左掃描一遍....寫的真好
我也試着用谷峰谷低的思想重新了一下
class Solution: def candy(self, ratings) -> int: lenth, i = len(ratings), 0 val = [1]*lenth while i+1<lenth: while i+1<lenth and ratings[i]<ratings[i+1]: val[i+1]=val[i]+1 i += 1 top = i while i+1<lenth and ratings[i]>ratings[i+1]: i+=1 for j in range(i-1, top-1, -1): val[j]=max(val[j+1]+1, val[j]) while i+1<lenth and ratings[i+1]==ratings[i]: i+=1 ans = 0 for i in range(lenth): ans+=val[i] return ans