排序数组删除最少数量的元素

时间:2018-03-12 21:26:35

标签: algorithm sorting data-structures

我正在尝试解决以下问题:

  1. 我有一个大型数组,有数千条记录。
  2. 我想按降序获取排序数组。但我不能 重新排序元素。我只能删除元素,或填充元素 空。
  3. 其余元素(未删除)应与之形成一个数组 降序。
  4. 条件是我必须删除最小数量的记录并获得最终数组中的最大记录数。
  5. 有关如何解决它的任何想法?最大减少子序列将不起作用,因为我可以从数组内的任何位置删除元素。不仅仅是双方。

1 个答案:

答案 0 :(得分:0)

从Prune和user3386109以及Prune的评论我用PHP以这种方式解决了它。

我使用PHP从Wikipedia获取算法,略微修改。

function longest_decreasing_subsequence($x) {
  $p = array();
  $m = array();
  $p = array_pad($p, count($x), null);
  $m = array_pad($m, count($x) + 1, null);
  $l = 0;
  for ($i = 0; $i < count($p); $i++) {
    $lo = 1;
    $hi = $l;
    while($lo <= $hi) {
      $mid = ceil(($lo + $hi) / 2);
      if($x[$m[$mid]] > $x[$i]) {
        $lo = $mid + 1;
      }
      else {
        $hi = $mid - 1;
      }
    }
    $newL = $lo;
    $p[$i] = $m[$newL - 1];
    $m[$newL] = $i;

    if($newL > $l) {
      $l = $newL;
    }
  }

  $s = array();
  $s = array_pad($s, $l, null);
  $k = $m[$l];
  for($i = $l - 1; $i >= 0; $i--) {
    $s[$i] = $x[$k];
    $k = $p[$k];
  }
  return $s;
}