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基础试题(含答案)
举例 最长重复子数组 题目要求 给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 题目分析 这个题目本质上就是最长公共子串算法,使用动态规划算法就可以轻松解决。 假设A[i] == B[j], 这时,我们不去考虑A[i+1]好B[j+1]的关系,而是考虑A[i-1]和B[j-1]的关系。动态规划,总是依据前面的结果来计算当前的结果。 那么要依据前面的什么结果呢?假设A[i]和B[j]是最长公共子串的结尾处,那么我们用DP[i+1][j+1]记录这个子串的长度。 现在,请考虑DP[i][j]表达的含义是什么呢? 它表示以A[i-1]和B[j-1]结尾的公共子串的长度,且DP[i][j] + 1 = DP[i+1][j+1]。 为什么要用DP[i+1][j+1]来记录以A[i]和B[j]结尾的公共子串的长度呢?看起来,下角标不一致,感觉怪怪的。 之所以这样做,是因为动态规划总是用前面的结果来计算当前的结果。当我们计算DP[i+1][j+1]时,需要用到DP[i][j],i和j都是从0开始的。当我们考虑A[0]和B[0]的关系时,我们想要计算的是DP[1][1],这时,我们就可以利用DP[0][0],如果用DP[0][0]表示以A[0],B[0]结尾的公共子串的长度,那么我们就不得不利用DP[-1][-1]+1来计算DP[0][0],但是DP[-1][-1]并不存在。 因此,DP这个二维矩阵的第一行和第一列都设置为0,如此,就可以完全使用DP[i][j] + 1 = DP[i+1][j+1] 这个公式来进行计算,如下图所示  示例代码 def find_max_lengh(lst_1, lst_2): max_len = 0 dp = [[0 for i in range(len(lst_1)+1)] for j in range(len(lst_2)+1)] for i in range(len(lst_1)): for j in range(len(lst_2)): if lst_1[i] == lst_2[j]: dp[i+1][j+1] = dp[i][j] + 1 if dp[i+1][j+1] > max_len: max_len = dp[i+1][j+1]
return max_len
if __name__ == '__main__': lst_1 = [1, 2, 3, 2, 1] lst_2 = [3, 2, 1, 4, 7] max_len = find_max_lengh(lst_1, lst_2) print(max_len)
|