在Python中找出将列表转换为非递增列表所需的操作数

在Python中找出将列表转换为非递增列表所需的操作数

假设我们有一个名为nums的数字列表。现在让我们考虑一个操作,其中我们取两个连续的值并将其合并为一个值,方法是取它们的和。我们必须找到所需的最小操作数,以使列表变为非递增。

因此,如果输入如下所示:nums = [2, 6, 4, 10, 2],则输出将为2,因为我们可以合并[2,6]以获得[8, 4, 10, 2],然后合并[8, 4]以获得[12, 10, 2]。

要解决这个问题,我们将按照以下步骤执行-

  • 如果nums为空,则
    • 返回0
  • 在nums的末尾插入-inf
  • N := nums的大小
  • dp :=一个大小为N的列表,并用0填充
  • arr: = 一个大小为N的列表,并用0填充
  • p: = arr的大小
  • arr[p-1] := nums[N-1]
  • arr[p-2] := nums[N-2]
  • 对于i在范围N – 3到0,每次递减1,执行以下操作
    • j := i
    • x := nums j
    • 当j
    • j := j +1
    • x: = x + nums [j]
  • dp [i]: = j-i + dp [j + 1]
  • arr [i]: = x
    • 返回dp [0]

让我们来看看以下实现,以更好地理解-

示例

class Solution:
   def solve(self, nums):
      if not nums:
         return 0
      nums.append(float("-inf"))
      N = len(nums)
      dp = [0] * N
      arr = [0] * N
      arr[-1] = nums[-1]
      arr[-2] = nums[-2]
      for i in range(N - 3, -1, -1):
         j = i
         x = nums[j]
         while j < N-1 and x < arr[j + 1]:
            j += 1
            x += nums[j]
         dp[i] = j-i + dp[j + 1]
         arr[i] = x
      return dp[0]
ob = Solution()
nums = [2, 6, 4, 10, 2]
print(ob.solve(nums))

输入

[2, 6, 4, 10, 2]

输出

2

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程