一尘不染

通过删除最小数量的元素,将给定的整数数组转换为排序的整数

algorithm

我正在解决以下问题:

我必须通过删除最小数量的元素,将给定的整数数组转换为有序数组。

例如:[3,5,2,10,11]将通过删除‘2’进行排序:[3,5,10,11]。或[3,6,2,4,5,7,7]通过删除‘3’,‘6’进行排序:[2,4,5,7,7]或通过删除‘6’,‘2’
:[3,4,5,7,7](两种方式我都删除2个元素,因此它们都是正确的)。

我的想法是对每个元素进行计数,以查看它与其他元素有多少冲突。我的意思是冲突:在第一个示例中,数字“ 3”和“ 5”各有1个冲突(数字为“ 2”),数字“
2”有2个冲突(数字为“ 3”和“ 5”)
。因此,在计算了冲突数组之后,我从原始数组中删除了冲突数量最大的元素,然后重复其余数组,直到所有元素的冲突都为0。

但是,这不是一种有效的方法(在某些情况下,我还没有想到它可能还会产生错误的结果),因此我想知道是否有人可以想到更好的解决方案。


阅读 236

收藏
2020-07-28

共1个答案

一尘不染

我相信,这只是
最长的子序列问题不断增长
的巧妙掩饰 如果删除具有排序顺序的元素的最少数量,那么剩下的就是原始数组中最长的递增子序列。因此,您可以执行以下操作:

  1. 找到最长的递增子序列(为此存在O(n log n)个算法),然后
  2. 删除不在该子序列中的所有内容。

希望这可以帮助!

2020-07-28