Python程序:计算支付给所有优秀员工的最低金额


假设我们有一个名为ratings的数字列表,它显示了程序员的绩效分数。现在,经理想要给每个程序员1000卢比,但如果两个程序员相邻,他们希望支付给绩效较好的程序员的金额至少比绩效较差的程序员高1000卢比。我们必须找到经理可以支付的最低金额。

因此,如果输入类似于ratings = [1, 2, 5, 1],则输出将为7000,因为我们可以为每个程序员支付的最低金额分别为[1000, 2000, 3000, 1000]

为了解决这个问题,我们将遵循以下步骤:

  • pay := 一个与ratings大小相同的列表,最初所有值都为1

  • 对于范围从1到ratings大小减1的i,执行以下操作:

    • 如果ratings[i] > ratings[i-1],则

      • pay[i] := pay[i-1]+1

  • 对于范围从ratings大小减2到0的i,递减1,执行以下操作:

    • 如果ratings[i] > ratings[i+1],则

      • pay[i] := pay[i]和pay[i+1]+1中的最大值

  • 返回(pay元素之和) * 1000

让我们看看下面的实现,以便更好地理解:

示例

 在线演示

class Solution:
   def solve(self, ratings):
      pay=[1 for _ in ratings]
      for i in range(1, len(ratings)):
         if ratings[i] > ratings[i-1]:
            pay[i] = pay[i-1]+1
      for i in range(len(ratings)-2,-1,-1):
         if ratings[i] > ratings[i+1]:
         pay[i] = max(pay[i], pay[i+1]+1)
      return sum(pay)*1000
ob = Solution()
ratings = [1, 2, 5, 1]
print(ob.solve(ratings))

输入

[1, 2, 5, 1]

Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.

输出

7000

更新于:2020年10月8日

309次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告