2025-06-19 03:17:08
2025-06-19 04:55:53
谢谢大神,感觉确实应该是dp问题,我试了下代码,可以运行,就是复杂度太高,超时了,能不能将复杂度降低点?算法导论(第三版)P226的15.4-6提到有O(nlgn)的方法,不知大神能否研究下这种可能?
复杂度为O(nlogn)的算法,其思想是设一个辅助数组temp,temp[i]表示长度为i+1(也就是程序中的len)的最长递增子序列的最小末尾,则显然temp是有序的。遍历原数组中的每一个元素,对于每个元素key,若比temp数组中当前最后一个元素大,则直接插入temp数组,表示最长递增子序列长度可以增加一,新的LIS以这个元素结尾;否则要么temp中已包含key这个元素,则不做任何操作,要么temp中的数全部大于这个元素,则key取代temp[0]成为长度为1的LIS的结尾元素,要么必然存在temp[j]<key<temp[j+1],这时key应取代temp[j+1]成为长度为j+2的LIS的结尾元素,对于后两种情况(temp中的数全部大于这个元素或temp[j]<key<temp[j+1]),key实际是取代了temp中比key大的和key最接近的元素。最后temp数组的长度(len)即为所求。