假设我们有一个称为nums的数字列表,并且它们按升序排序,我们必须从列表中删除k个值,以使任意两个相邻值之间的最大差值尽可能小,最后找到该差值。
因此,如果输入像nums = [15,20,30,400,1500] k = 2,那么输出将是10,就像我们删除[400,1500]以获得20和30的差一样。
为了解决这个问题,我们将遵循以下步骤-
abs_diff:=以num为单位的每个连续元素的差异列表
定义一个功能dp()
。这需要i,j,cnt
如果cnt等于0,则
m:= m和abs_diff [k]的最大值
m:= 0
对于范围i至j的k
返回m
返回dp(i + 1,j,cnt-1)和dp(i,j-1,cnt-1)的最小值
从主要方法执行以下操作:
返回dp(0,abs_diff的大小-1,k)
让我们看下面的实现以更好地理解-
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