algorithm - 删除数组中k个元素的动态规划算法

标签 algorithm dynamic-programming

我最近试图解决一个问题,该问题将 n 个排序的整数作为输入,我们必须从数组中删除 k 个整数以最大化两个连续项之间的最小差异。

示例测试用例: 数组:6,7,10,13,15 删除 2 个整数。

答案:删除的整数:7,13

我的方法:

因为我们必须删除 k 个整数,所以我们迭代数组 k 次。在每次迭代中,我们计算两个连续项之间的最小差值。 假设在一次迭代后,对 i 和 i+1 具有最小差异。然后我们比较 i-1 和 i+1 之间的差异以及 i 和 i+2 之间的差异。 如果第一个更大,那么我们删除术语 i,否则我们删除 i+1。

这种方法给我一个错误的答案。

因为对 n 和 k 的约束很低 ( 1<=k<=n<=30 )。 我相信这个问题可以使用动态规划来解决,但我不知道如何处理它。

任何帮助都会很好。我不希望代码只是算法及其派生方式。 提前致谢

最佳答案

这是一个相当简单的立方时间算法。如果我们预先确定最小差异,那么线性时间贪婪算法会告诉我们需要删除多少元素(从左到右扫描一次,仅在需要时删除过去的选择)。遍历所有 n 选择 2 = O(n^2) 可能的最小差异并取最大导致最多 k 删除。 (要达到 O(n^2 log n):对这些可能的最小值进行排序并使用二进制搜索。)

关于algorithm - 删除数组中k个元素的动态规划算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25337401/

相关文章:

具有数组/向量性能特征的 Scala 流

java - 查找 t 测试用例中 number 的除数个数

python - 偶数异或子数组的数量

python - 分段最小二乘的动态规划算法

algorithm - 子集选择的贪婪或动态算法

javascript - 使用正则表达式在随机字符串中准确查找字母

algorithm - 是否总是存在对应内存方法的动态规划自下而上的解决方案

algorithm - 快速计算幂(例如 2^11)

具有强度的热图算法

algorithm - 是否有一个例子可以在 Omega(q log n) 中运行 Union & find algorithm without union by rank?