| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> LeetCode 300:最长递增子序列 -> 正文阅读 |
|
[数据结构与算法]LeetCode 300:最长递增子序列 |
链接 思路:动态规划 (dp table)模板: 动态规划的核?设计思想是数学归纳法; 如想证明?个数学结论,那么我们 先假设这个结论在 k < n 时成?,然后根据这个假设,想办法推导证明出 k = n 的时候此结论也成?。如 果能够证明出来,那么就说明这个结论对于 k 等于任何数都成?。 设计动态规划算法,不是需要?个 dp 数组吗?可以假设 dp[0…i-1] 都已经被算出来 了,然后问:怎么通过这些结果算出 dp[i]? dp数组的定义:dp[i] 表示以 nums[i] 这个数结尾的最长递增?序列的长度; base case:dp[i] 初始值为 1,因为以 nums[i] 结尾的最?递增?序列起 码要包含它??。
假设已经知道了 dp[0…4] 的所有结果,如何通过这些已知结果推出 dp[5] ? nums[5] = 3,既然是找递增?序列,只要找到前面那些结尾比 3 小的子序列,然后把 3 接到这些子序列末尾,就可以形成?个新的递增子序列,?且这个新的子序列长度加?。 nums[5] 前?有哪些元素小于 nums[5]?用for 循环比较?波就能把这些元素找出来。 例中nums[0] 和 nums[4] 都是小于 nums[5] 的,然后对比 dp[0] 和 dp[4] 的值,我们 让 nums[5] 和更长的递增?序列结合,得出 dp[5] = 2+1=3 ; 总结: 2.根据 dp 数组的定义,运?数学归纳法的思想,假设 dp[0…i-1] 都已知,想办法求出 dp[i],?旦这 ?步完成,整个题目基本就解决了。 Java实现:dp定义是 dp[i] 表示以 nums[i] 这个数结尾的最长递增子序列的长度;
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:21:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |