📅  最后修改于: 2023-12-03 15:10:36.262000             🧑  作者: Mango
这个问题我们可以通过排序和计算连续序列的长度来解决。具体步骤如下:
首先对给定的数组进行排序,这样可以减小需要删除的元素数量。
扫描排序后的数组,计算每个连续序列的长度。
删除数组中不在所有连续序列中的元素。
代码实现如下:
def minimize_deletions(nums: list[int]) -> int:
n = len(nums)
nums.sort()
lengths = [1] * n
for i in range(1, n):
if nums[i] == nums[i-1] + 1:
lengths[i] = lengths[i-1] + 1
return n - max(lengths)
该函数接受一个整数列表 nums
作为输入,并返回最小化使 nums
按任何顺序连续所需的删除数。其时间复杂度为 $O(n\log n)$,空间复杂度为 $O(n)$。
使用示例:
>>> minimize_deletions([4, 2, 3, 1, 5, 6, 8, 7])
2
>>> minimize_deletions([1, 2, 3, 4, 5])
0
>>> minimize_deletions([1, 5, 2, 4, 3])
2
这个问题非常类似于 LeetCode 上的 128. 最长连续序列,只不过题目要求变成了最小删除数量。