学习交流加

  • 个人qq:
    1126137994
  • 个人微信:
    liu1126137994
  • 学习交流资源分享qq群:
    962535112

这是一个经典的LIS(即最长上升子序列)问题,请设计一个尽量优的解法求出序列的最长上升子序列的长度。

给定一个序列arr及它的长度n(长度小于等于500),请返回LIS的长度。

测试样例:
[2,1,5,3,6,4,8,9,7],9
返回:5

分析思路:化简到子问题,那么这道题应该是化简到求该序列长度的前1,2,3,4,5,6…n个数的最长上升子序列问题

那么同样是开辟一个数组dp[n] 这里开辟的是数组还是矩阵,是根据实际情况而来。那么dp[i]就代表必须以arr[i]结尾的情况下,arr[0…i]的最长上升子序列的长度。

由上图的分析可知:
dp[0]=1;
dp[1] 取决于arr[1]是否大于arr[0] 本题是不大于,所以dp[1]=1;
dp[2]取决于arr[2]是否大于arr[j](j=0~1),大于arr[j]的话,那么就取dp[j]+1的最大值
dp[3]取决于arr[3]是否大于arr[j](j=0~2),大于arr[j]的话,那么就取dp[j]+1的最大值
dp[4]取决于arr[4]是否大于arr[j](j=0~3),大于arr[j]的话,那么就取dp[j]+1的最大值

那么dp[i]的表达式就应该是:
dp[i]=max{dp[j]+1(j=0~(i-1)),且arr[i]>arr[j]}

由以上分析,可写程序如下:

class LongestIncreasingSubsequence {public:int getLIS(vector<int> A, int n) {// write code hereint dp[n];/* 初始化dp */for(int i=0;i<n;i++){dp[i]=1;}int Max=1;for(int i=1;i<n;i++){for(int j=0;j<i;j++){if(A[i]>A[j]){//注意dp[j]+1这个表达式只能放到判断语句里面,这样才不会改变它的值(只做判断),//如果改变了dp[j]的值,将会影响下一次循环的计算if((dp[j]+1)>dp[i])    dp[i]=dp[j]+1;}}/* 外部每循环一次,则求得了dp[i]的值,选出每次循环后得到的最大值,就是最终需要返回的值 */if(dp[i]>Max)Max=dp[i];;}return Max;}
};

动态规划的思想!!!化整体为0,1,2…先计算子问题,再合并计算整体问题!!!

【常见笔试面试算法题12续集三】动态规划算法案例分析3 LIS练习题(最长上升子序列)相关推荐

  1. 【常见笔试面试算法题12续集四】动态规划算法案例分析4 LCS练习题练习题(最长公共子序列的长度)

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 给定两个字符串A和B,返回两个字符串的最长公共子序列的长度.例如,A ...

  2. 【常见笔试面试算法题12续集六】动态规划算法案例分析6 最优编辑练习题

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 对于两个字符串A和B,我们需要进行插入.删除和修改操作将A串变为B串 ...

  3. 【常见笔试面试算法题12续集二】动态规划算法案例2矩阵最小路径和练习题

    加qq1126137994 一起学习更多技术!!! 有一个矩阵map,它每个格子有一个权值.从左上角的格子开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有 ...

  4. 【常见笔试面试算法题12续集一】动态规划算法案例1台阶问题练习题

    加qq1126137994 一起学习更多技术!!! 以下问题,都可以用非动态规划的方法做,我为了整理动态规划的方法思路,就全部用动态规划的思路来解决问题,这样还可以简化问题的处理,是时间复杂度更低!! ...

  5. 【常见笔试面试算法题12续集五】动态规划算法案例分析5 01背包练习题

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 一个背包有一定的承重cap,有N件物品,每件都有自己的价值,记录在数 ...

  6. 九月百度,迅雷,华为,阿里巴巴,最新校招笔试面试十题(更新至9.24)

    题记 本博客自2010年10月11日开通以来,已经帮助了一大批人找到工作,特别是连续三年在每一年的9.10月份陪伴了至少三届毕业生找工作的旅程,包括校招中的笔试面试,今年也不会例外,我会在本博客开通3 ...

  7. 九月百度,迅雷,华为,阿里巴巴,最新校招笔试面试十题 .

    九月百度,迅雷,华为,阿里巴巴,最新校招笔试面试十题 http://blog.csdn.net/v_july_v/article/details/11921021 题记 本博客自2010年10月11日 ...

  8. 武汉大学计算机学院自主招生考试内容,武汉大学自主招生笔试面试真题

    武汉大学自主招生笔试面试真题2018-10-20 14:16:33文/叶丹 自主招生考试中,笔试和面试是考生和家长最为关注的,而每年都有关于自主招生脑洞大开的题目,大家很好奇自主招生考试都考什么?下面 ...

  9. 福利篇2——嵌入式岗位笔试面试资料汇总(含大厂笔试面试真题)

    前言 汇总嵌入式软件岗位笔试面试资料,供参考. 文章目录 前言 一.公司嵌入式面经 1.小米 1)面试时长 2)面试问题 2.科大讯飞 1)面试时长 2)面试题目 3.其余公司面经 二.嵌入式笔试面试 ...

最新文章

  1. Windows程序设计学习笔记(1):一个简单的windows程序
  2. javaweb 后台知识点
  3. 《NO STRATEGY》《重塑战略》
  4. matlab c++ 符号变量问题
  5. eclipse m2e配置_使用此首选项可加快Eclipse m2e配置
  6. 1!+2!+3!+…+10!的和
  7. python中下拉菜单大小_请问各位大神如何将下拉菜单的文字设定成一个值?
  8. JavaScript表单验证年龄
  9. 在vscode中新建html文件的两种方法
  10. vue项目中如何下载excel表格模板
  11. android Activity设置透明主题样式方法
  12. python视频笔记17(控制窗体)
  13. html2canvas 截图丢失部分元素的问题
  14. 机械工程基础笔记整理
  15. 少吃柿子、山楂、黑枣,警惕鞣酸
  16. cc32a_demo-32dk2j_cpp_纯虚函数与抽象类-txwtech
  17. Unity 3D:接入原生广告(UnityAds)和 GoogleAdmob 和 Vungle
  18. 什么是三态输出电路?什么是集电极开路输出和漏极开路输出?
  19. 一张图说明TCP和UCP协议
  20. oraclel列变行(多列变成多行)

热门文章

  1. 第一百零三期:解读回归测试:类型、选择、挑战和实践
  2. CS144 lab0 笔记
  3. 2020年周记(2/50)
  4. linux打印mysql堆栈_第25问:MySQL 崩溃了,打印了一些堆栈信息,怎么读?
  5. c++ 用eclipse建立一个类,并实例化并运行
  6. hadoop fs 命令详解
  7. AngularJs自学心得
  8. PHP-Windows下搭建PHP-MSF环境【原创】
  9. oracle_数据库对象
  10. python selenium与自动化