我正在寻找一种算法来排序数组,但不是通过移动值。相反,我想删除尽可能少的值并最终得到一个排序列表。基本上我想找到最长的升序子阵列。
举例说明:
1 4 5 6 7 2 3 8
应该成为(2删除)
1 4 5 6 7 8
而不是(5删除)
1 2 3
我可以看到我如何以天真的方式做到这一点,即通过递归检查每个元素的'remove'和'dont remove'树。我只是想知道是否有更快/更有效的方法来做到这一点。对于这类问题,有一个共同的算法吗?
答案 0 :(得分:8)
您正在寻找longest increasing subsequence问题。有一个algorithm可以在O(n log n)时间内解决它。
答案 1 :(得分:3)
网站上有一个O(NlogN)算法,它比递归算法快。
http://www.algorithmist.com/index.php/Longest_Increasing_Subsequence