我正在解决以下问题:
我必须通过删除最小数量的元素,将给定的整数数组转换为有序数组。
例如:[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。
但是,这不是一种有效的方法(在某些情况下,我还没有想到它可能还会产生错误的结果),因此我想知道是否有人可以想到更好的解决方案。
我相信,这只是 最长的子序列问题不断增长 的巧妙掩饰 。 如果删除具有排序顺序的元素的最少数量,那么剩下的就是原始数组中最长的递增子序列。因此,您可以执行以下操作:
希望这可以帮助!