我正在尝试解决以下问题:
有关如何解决它的任何想法?最大减少子序列将不起作用,因为我可以从数组内的任何位置删除元素。不仅仅是双方。
答案 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;
}