在Python中查找删除k个数字后相邻值的最大差的程序

在Python中查找删除k个数字后相邻值的最大差的程序

假设我们有一个名为 nums 的按升序排列的数字列表,我们必须从列表中删除 k 个值,使得任何两个相邻值之间的最大差别尽可能小,并最终找到差值。

因此,如果输入如下 nums = [15、20、30、400、1500] k = 2,则输出将是 10,因为如果我们删除 [400、1500],可以得到 20 和 30 的差值。

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

  • abs_diff: nums 中每个相邻元素的差异列表
  • 定义函数 dp()。这将需要 i、j 和 cnt
  • 如果 cnt 和 0 相同,则
    • m := 0
    • 对于 k in range i 到 j,执行以下操作:
      • m := m 和 abs_diff[k] 中的 maximum
    • 返回 m
  • 返回 dp(i+1,j,cnt-1) 和 dp(i,j-1,cnt-1) 中的 minimum
  • 从主方法执行以下操作:
  • 返回 dp(0,abs_diff大小-1,k)

让我们看下面的代码实现以更好地理解。

更多Python相关文章,请阅读:Python 教程

例子

class Solution:
   def solve(self, nums, k):
      abs_diff = [nums[i] - nums[i - 1] for i in range(1, len(nums))]
      def dp(i, j, cnt):
           if cnt == 0:
              m = 0
              for k in range(i, j + 1):
                 m = max(m, abs_diff[k])
              return m
           return min(dp(i + 1, j, cnt - 1), dp(i, j - 1, cnt - 1))
      return dp(0, len(abs_diff) - 1, k) 
ob = Solution()
nums = [15, 20, 30, 400, 1500] 
k = 2
print(ob.solve(nums, k))

输入

[15、20、30、400、1500],2

输出

10

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程