摘要:
基本思路是用当前递增子序列的起始元素去匹配之前递增子序列的末尾元素,如果起始元素 A[i] > 末尾元素A[j] 则两个子序列可以组合成新的子序列。
关键点:
每种长度的子序列只需保留末尾元素最小的一个,所以只需一个数组minR即可,index是长度,value是该长度的子序列的有末尾元素。
当找到一个新的子序列后,需要从这个子序列的开头开始遍历一遍,假设当前元素下标为k:1)以k开始的子序列(也即当前子序列的右半部份)可能可以匹配到新的子序列,因为A[k] > A[k-1]; 2) 以k结束的子序列子序列(也即当前子序列的左半部份)可能可以更新已有的子序列(长度一样,末尾元素更小)。换言之,我们还需要考虑当前子序列的子序列,而不是仅仅将当前找到的子序列当作整体处理。 阅读全文