从 Python 中的列表中查找每个子列表的最小值之和的程序

假设我们有一个名为 nums 的数字列表。我们必须找到 nums 中每个子列表 x 的最小值的总和。如果答案太大,则将结果修改为 10^9 + 7。

因此,如果输入类似于 nums = [5, 10, 20, 10, 0],那么输出将是 90,因为子列表是 [[5], [10], [20], [10], [ 0], [5,10], [10,20], [20,10], [10,0], [5,10,20], [10,20,10], [20,10,0] , [5,10,20,10], [10,20,10,0], [5,10,20,10,0]], 它们的最小值为 [5, 10, 20, 10, 0, 5, 10, 10, 0, 5, 10, 0, 5, 0, 0],所以总和是 90。

示例

让我们看看以下实现以获得更好的理解 -

def solve(nums):
   ans = 0
   s = []
   temp_sum = 0
   for index, value in enumerate(nums):
      while s and value <= s[-1][1]:
         temp_sum -= s[-1][2]
         s.pop()
      if not s:
         s.append([index, value, (index + 1) * value])
      else:
         s.append([index, value, (index - s[-1][0]) * value])
      temp_sum += s[-1][2]
      ans += temp_sum
   return ans % (10**9 + 7)

nums = [5, 10, 20, 10, 0]
print(solve(nums))

输入

[5, 10, 20, 10, 0]
输出结果
90

猜你喜欢