python题目集pta有什么软件可以搜python题目答案python题目网站
下载地址 https://share.weiyun.com/OvviwGnZ
资料目录 Python练习集100题 100道Python面试题 Python100经典练习题 Python经典题目100道题 Python题库(已收录100道真题) Python100例视频讲解课程 菜鸟教程Python教程100例 130道python练习题,涵盖基础内容的方方面面 Python考试题复习知识点试卷试题 PYTHON测试题和答案 python第一阶段考试题 Python经典面试题和答案解析 python期末考试复习试卷 python习题集大全(附答案解析) 老男孩Python全栈7期练习题(面试真题模拟) 尚观python第一阶段考试(面试真题模拟) 《Python程序设计基础与应用》习题答案 《Python快速编程入门》——课后题答案 Python编程基础张健 , 张良均课后习题及答案 Python程序设计基础及实践(慕课版)郭炜习题答案 Python程序设计基础习题答案与分析 python基础试题(含答案)
举例 最长上升子序列 题目要求 一个元素为数值的列表,找到其最长上升子序列的长度。 比如 [5, 4, 1, 2, 5, 3], 最长上升子序列是 [1, 2, 3], 长度为3。 思路分析 假设列表lst长度为k,创建一个长度同样为k的列表dp,dp内所有元素初始化为1,dp[i]代表以lst[i]结尾的最长上升子序列长度,这其实是一个假设,对于单个元素来说,也是列表的子序列,而且是上升的。 对于lst[0]来说,它自己就是一个子序列,单个元素,也可以视为上升的,因此,dp[0] 等于1,真实的表示了以lst[0]结尾的最长上升子序列的长度,但对于lst[j], j >0 来说,dp[j]就目前而言,还不能准确表示以lst[j]结尾的最长上升子序列的长度,不过没关系,计算dp[1]时,我们可以借助dp[0],计算dp[2]时,可以借助dp[0],dp[1],计算dp[j]时,可以借助dp[0]到dp[j-1]。 计算dp[j]时,如何借助之前已经计算出来的dp[0]到dp[j-1]呢,太简单了,假设 0<=i<j, 如果lst[i] < lst[j], 那么dp[j] = dp[i] + 1,dp[i]是已知的,lst[i] 小于lst[j], 这个上升子序列加入了lst[j],自然长度加1。 示例代码 # coding=utf-8
def get_long_incr_lst(lst): if len(lst) == 0: return 0 dp = [1 for item in lst] max_incr = 1 # 为什么要从1 开始呢,因为dp[0]是固定的,一定是1 for j in range(1, len(lst)): for i in range(j): if lst[i] < lst[j]: # 以lst[i]结尾的上升子序列里可以加入lst[j] dp[j] = max(dp[j], dp[i] + 1) max_incr = max(dp[j], max_incr)
return max_incr
print get_long_incr_lst([5, 4, 1, 2, 5, 3])
|