题目描述:
第一行 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