美文网首页数据解构和算法
64.最长递增子序列

64.最长递增子序列

作者: wo不是黄蓉 | 来源:发表于2022-02-24 22:05 被阅读0次

day14: 300. 最长递增子序列
(中等)
考点:动态规划
动态规划思想:在每个阶段都求得一个最优解,以此来达到结果最优的效果。
将每个问题分解成若干个子问题,先求解子问题,然后从子问题中得到原问题的解。
我们保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。
过程分析:

  • 用一个dp来存储每一步得到的结果,初始化可以都为1。可以这么理解,假使当前元素为10,在10 前面没有任何一个元素比10 小,因此可以认为以10 开始的最长子序列长度为1,即只有其自身。
  • 假使当前元素为9,在9前面没有任何一个元素比9小,因此可以认为以9 开始的最长子序列长度为1,即只有其自身.
  • 假使当前元素为2,在9前面没有任何一个元素比2小,因此可以认为以2 开始的最长子序列长度为1,即只有其自身.
  • 假使当前元素为5,在5前面存在1个元素2比5小,因此可以认为以5 开始的最长子序列长度为2,即其自身和2.以此类推,可以推出最终的dp为[1, 1, 1, 2, 2, 3, 4, 4]
    依旧看不懂的看 -> :这里
var lengthOfLIS = function(nums) {

 let dp = new Array(nums.length).fill(1),
    max = 1;
  for (let i = 1; i < nums.length; i++) {
    for (let j = 0; j < i; j++) {
      if (nums[i] > nums[j]) {
        //dp[j]即为当前元素和其前面元素相比过程中,比其大的元素的长度,求出最大值
        dp[i] = Math.max(dp[i], dp[j] + 1);
      }
    }
//在求出的子集中查找最大值
    max = Math.max(max, dp[i]);
  }
  return max;
};

console.log(lengthOfLIS([10, 9, 2, 5, 3, 7, 101, 18]));

相关文章

  • 64.最长递增子序列

    day14: 300. 最长递增子序列[https://leetcode-cn.com/problems/lon...

  • LeetCode-300-最长递增子序列

    LeetCode-300-最长递增子序列 300. 最长递增子序列[https://leetcode-cn.com...

  • 动态规划-LIS

    LIS 最长递增子序列 如 x 的 最长递增子序列长度为5 方法一 对 x 排序(升序)生成 x_sorted 对...

  • LeetCode 300. Longest Increasing

    问题描述 给定一个未排序的整数数组,找出最长的递增子序列。 栗子: 注意: 可能存在多种最长递增子序列的组合,只需...

  • 最长递增子序列

    问题描述 求最长递增子序列的长度 分析 主要是确定状态,F[i]表示以ai 结束的最长递增子序列长度,F[i]=m...

  • 经典DP问题合集

    一、上台阶问题 二、矩阵最小路径和 三、最长递增子序列 四、最长公共子序列 五、背包问题

  • 动态规划常见面试题

    子序列类型编辑距离 最长递增子序列 最大子数组 最长公共子序列 背包问题0-1背包问题 子集背包问题 完全背包问题...

  • 最长递增子序列: 动态规划和LCS(最长公共子序列)

    最长递增子序列: 动态规划和LCS(最长公共子序列)子序列和子串的区别:子序列不连续,字串连续。这个题两种解法 动...

  • 最长递增子序列

    //Given an unsorted array of integers, find the length of...

  • 最长递增子序列

    通常有4个步骤来设计动态规划算法: 1.刻画一个最优解的结构特征。 2.递归地定义最优解的值。 3.计算最优解的值...

网友评论

    本文标题:64.最长递增子序列

    本文链接:https://www.haomeiwen.com/subject/emhalrtx.html