在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