我正在解决以下问题:
我需要通过删除最少数量的元素来将给定的整数数组转换为排序后的数组。
例如:[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' 分别与数字 '2' 发生了1次冲突,而数字 '2' 则与数字 '3' 和 '5' 发生了2次冲突。 因此,在计算冲突数组后,我从原始数组中删除具有最大冲突数的元素,并对剩余数组重复此操作,直到所有元素均没有冲突。
虽然这种方法不够高效(在某些情况下可能会产生错误的结果),所以我想知道是否有更好的解决方案。
我需要通过删除最少数量的元素来将给定的整数数组转换为排序后的数组。
例如:[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' 分别与数字 '2' 发生了1次冲突,而数字 '2' 则与数字 '3' 和 '5' 发生了2次冲突。 因此,在计算冲突数组后,我从原始数组中删除具有最大冲突数的元素,并对剩余数组重复此操作,直到所有元素均没有冲突。
虽然这种方法不够高效(在某些情况下可能会产生错误的结果),所以我想知道是否有更好的解决方案。