题解 | #最长递增子序列#
最长递增子序列
http://www.nowcoder.com/practice/9cf027bf54714ad889d4f30ff0ae5481
function LIS( arr ) { /** 动态规划 */ // 状态:dp[i]表示以第i个元素结尾的递增子序列; // 状态转移:dp[i] = max{dp[0, i-1]} // 计算最dp[i]; // 反向遍历寻找元素; const dp = new Array(arr.length).fill(1); let max=1;; for (let i=1; i<arr.length; i++) { for (let j=0; j<i; j++) { if (arr[i] > arr[j]) { dp[i] = Math.max(dp[i], dp[j] + 1); max = max > dp[i] ? max : dp[i]; } } } console.log('max', max) const res = new Array(max); for (let i= dp.length-1, j=max; j>0; i--) { if (dp[i] === j) { j-- res[j] = arr[i] } } return res; } module.exports = { LIS : LIS };