最长递增子序列个数
来源:互联网 发布:windows账户格式 编辑:程序博客网 时间:2024/06/06 02:02
example 1
数组[1,3,5,4,7] 最长递增子序列有[1,3,5,7]与[1,3,4,7]两个长度为4的数组
example 2
数组[2,2,2,2,3]最长递增子序列为[2,3],有4个
使用dp算法,给定数组[nums],最长递增子序列长度:
L(i) = max(L(j) + 1) if nums[j] < nums[i] for 1<=j < i
def findNumberOfLIS(nums): n = len(nums) dp = [[1,1] for i in range(n)] #dp[i][0] 存储以下标i结尾的数组的最长递增子序列长度 #dp[i][i] 存储以下表i结尾的最长递增子序列的个数 max_for_all = 1#初始化最大个数 for i, value in enumerate(nums): cur_max, count = 1, 0 #cur_max 存储当前递增序列长度count纪录最长长度的个数 for j in range(i):#遍历子问题 if nums[j] < value: if dp[j][0]+1 > cur_max: cur_max = dp[j][0]+1#更新当前最大长度 count = 0 #如果需要更新那么说明这个最大长度是第一次出现 if dp[j][0]+1 == cur_max: #如果最大长度又出现了,加上之前已有的次数dp[j][1] count+=dp[j][1] dp[i] = [cur_max, max(count, dp[i][1])]#更新dp max_for_all = max(cur_max, max_for_all) return sum([item[1] for item in dp if item[0]==max_for_all])#计算最长长度出现的总次数nums=[1,3,5,4,7]print(findNumberOfLIS(nums))#OUTPUT:2
阅读全文
0 0
- 最长递增子序列个数
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- mac下将vscode与unity关联,并使用vscode调试
- JDBC Statement实现数据库增删改查案例
- 使用Cmake生成CEF的项目源文件,并在VS2015中编译通过
- gitlub私服的搭建
- ImportError: No module named cv2 报错处理
- 最长递增子序列个数
- angular入门2
- odbccp32.lib(dllload.obj) : error LNK2019: __imp___vsnprintf,该符号在函数 _StringVPrintfWorkerA@20 中被引用
- hdu2087(剪花布条) KMP算法
- 基于MFC的五子棋应用(三)
- 面向对象中的类和接口的理解
- 36. Valid Sudoku
- vue2.0 中事件处理心得
- Saruman's Army