2020-字节跳动笔试(最少工资)

题目描述:

         第一行 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

 

原文地址:https://www.cnblogs.com/xidian-mao/p/11337961.html