JAVA动态规划,最长递增子序列的代码太难理解,求大神帮我讲解一下!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA动态规划,最长递增子序列的代码太难理解,求大神帮我讲解一下!相关的知识,希望对你有一定的参考价值。

第一层的 if 逻辑表示 如果新的一个数A[i]对于 B[]中的数来说是递增的,则len加1,这是记录递增数列长度的主要逻辑。else中的逻辑保证B[]中的数列是最新的递增数列。
举个例子,如果A数组为[1,2,3,4,5, 3.1, 3.2, 3.3, 3.4]
当i=4时 len=4 B=[x,1,2,3,4,x] 循环结束后 len=5 B=[x,1,2,3,4,5] 第一层判断走if
当i=5时 len=5 B=[x,1,2,3,4,5] 循环结束后 len=5 B=[x,1,2,3,3.1,5] 第一层判断走else
当i=6时 len=5 B=[x,1,2,3,3.1,5] 循环结束后 len=5 B=[x,1,2,3,3.1,3.2] 第一层判断走else
当i=7时 len=5 B=[x,1,2,3,3.1,3.2] 循环结束后 len=6 B=[x,1,2,3,3.1,3.2,3.3] 第一层判断走else
...
其中第一层的else中做的工作就是把B从[x,1,2,3,4,5] 一步步变成 [x,1,2,3,3.1,3.2],最终B[]的最后一个元素变成3.2, 在下一次A[i]=3.3的时候,就又会走第一次if的逻辑(len加1)了。
参考技术A 每人的名字大多都是父母给取的,过去都是根据自己家的辈分什么起的,中间的字大多是代表什么辈分,现在人,不像过去了!起名按自己的喜好,还有包括父母的姓等等。要说含义!应该都有点。不过,名字就是一个代码。也不能怎样!

求单调递增最长子序列长度

设计O(n*n)时间的算法,求n个数组成的序列的单调递增最长子序列长度

这道题在算法分析课本中属于课后习题,许多人做过,这道题是我真正体会到动态规划的思想的一道题,下面给出一个简单的思路!

记a[i]表示输入的序列,b[i-1]表示以a[i]结尾的序列的单调递增最长子序列,则原问题的解为b[n-1];

技术分享图片

 

以上是关于JAVA动态规划,最长递增子序列的代码太难理解,求大神帮我讲解一下!的主要内容,如果未能解决你的问题,请参考以下文章

关于用动态规划法求最大公共子序列的问题

动态规划之最大递增子序列

算法 LC 动态规划 - 最大递增子序列

单调递增最长子序列(动态规划)

动态规划求最长递增子序列的长度

动态规划求最长递增子序列