子序列经典题目

image.png

思路

思路写在代码里中,总结来说就是求了两次最大

  • dp[i] 是从0到i-1中最长的子序列dp[j]+1
  • 最终结果是0-i的dp中最长的那个dp
    1. var lengthOfLIS = function(nums) {
    2. let dp =new Array(nums.length).fill(1) //自身就是一个长度为1的序列
    3. let result =1
    4. for(let i=1;i<nums.length;i++){
    5. for(let j=0;j<i;j++){
    6. if(nums[i]>nums[j]){
    7. // dp[i] 是从0到i-1中最长的子序列+1
    8. dp[i] =Math.max(dp[i],dp[j]+1)
    9. }
    10. }
    11. // 最终结果是0-i的dp中最长的那个dp
    12. result =Math.max(result,dp[i])
    13. }
    14. return result
    15. };