算法导论第15章练习题 15.4-5
来源:互联网 发布:讲课软件 编辑:程序博客网 时间:2024/06/01 09:47
15.4-5设计一个O(n²)时间的算法,求一个n个数的序列的最长单调递增子序列。
第一种:对序列进行排序,排序之后得到序列b与原来的序列a,求最长公共子串。(排序之前先将原来序列中的重复元素删掉(保证公共子串递增)b中无重复元素,a保持原来不变)
第二种:
def longestIncreasingSubsequence(self, nums):
# write your code here
l=[0]*(len(nums)+1)
l[0]=0
for i in range(0,len(nums)):
l[i+1]=1
for j in range(0,i):
if nums[j]<nums[i] and l[j+1]+1>l[i+1] :
l[i+1]=l[j+1]+1
max=l[0]
for i in range(1,len(l)):
if l[i]>max:
max=l[i]
return max
动态规划:length数组存最长上升子序列的长度,length[i]表示以 原始数组nums[i]为子序列最右元素时 的最长上升子序列长度(涵盖所有可能)。当原始序列长度为0时,length[0]=0. 当原始序列长度为1时,length[1]=1.对于nums[2...n]中的nums[i],每个最大上升子序列长度 ,至少为1(只有自己),所以初始化为1.对于前面的每个元素nums[j],若该值小于nums[i],那么length[i]等于length[j]+1.遍历前面的所有数,即可得到最大的length[i].
最后可求得所有的length[i].取其中最大者即可。
参考 http://blog.csdn.net/zhangyx_xyz/article/details/50949957
http://blog.csdn.net/z84616995z/article/details/38011391
- 算法导论第15章练习题 15.4-5
- 算法导论第15章练习题 15.4-4
- 算法导论 练习题 15.4-5
- 算法导论第16章练习题 16.1-4
- 算法导论 练习题 15.4-3
- 算法导论 练习题 3.2-5
- 算法导论 练习题 4.1-5
- 算法导论 练习题 4.4-5
- 算法导论 练习题 5.2-5
- 算法导论 练习题 5.3-5
- 算法导论 练习题 6.1-5
- 算法导论 练习题 6.2-5
- 算法导论 练习题 7.2-5
- 算法导论 练习题 7.4-5
- 算法导论 练习题 10.4-5
- 算法导论 练习题 12.1-5
- 算法导论 练习题 13.1-5
- 算法导论 练习题 14.1-5
- [坑]Unity5.X—— AssetBundle
- 夏令营一部分数学试题
- rm: cannot remove `dir-name': Directory not empty(文件夹里有.fuse_hidden0000007f00000002)
- CSS之flex需要知道的一切(一)
- Android Studio Default Activity not found 报错
- 算法导论第15章练习题 15.4-5
- python list 求交集 差集 并集
- 最短路与最小生成树
- iOS模式详解runtime
- TelecomService启动流程
- 1.深度学习-初识之历史发展
- python 类(下)
- spring bean循环引用问题
- 51nod 1717 好数