Python————算法练习

it2022-05-05  153

文章目录

算法练习question1问题描述代码实现 question2问题描述代码实现 question3问题描述代码实现 question4问题描述 1:方案:问题描述 2:

算法练习

question1

问题描述

题目:假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h,k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。

代码实现
high = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]] #将原列表按照k值升序排列 high.sort(key=lambda data: data[1], reverse=False) #将原列表按照h值降序排列 high.sort(key=lambda data: data[0], reverse=True) #[[5, 0], [7, 0], [5, 2], [6, 1], [4, 4], [7, 1]] output = [] for item in high: #按照顺序一一插入 output.insert(item[1], item) print(output)

question2

问题描述

给定一个三角形,从顶部到底部找到最小路径和。 每个步骤,您可以移动到下面的行上的相邻数字。

代码实现
list = [ [2], [3,4], [6,5,7], [4,1,8,3] ] def minimumTotal(triangle): nums = triangle if nums == [[]]: return 0 for b in range(len(nums) - 2, -1, -1): for a in range(len(nums[b])): nums[b][a] = nums[b][a] + min(nums[b + 1][a], nums[b + 1][a + 1]) return triangle[0][0] print(minimumTotal(list))

question3

问题描述

有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生 中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?

代码实现
n = int(input('请输入学生个数:\n')) energy_input = input('请输入%s个学生的能力值:\n' % n) term_input = input('请输入学生个数和最大学生标号:\n') energy = [int(i) for i in energy_input.split(' ')] k, d = int(term_input.split(' ')[0]), int(term_input.split(' ')[1]) dp = [(i, i) for i in energy] for i in range(1, k): dp1 = dp[:i] for j in range(i, n): temp = [] for z in range(j - d, j): if z < 0: continue else: temp.append(energy[j] * dp[z][0]) temp.append(energy[j] * dp[z][1]) # print('temp') # print(temp) dp1.append((max(temp), min(temp))) # print('dp1') # print(dp1) dp = dp1 # print('dp') # print(dp) print(max([max(each) for each in dp]))

question4

问题描述 1:

全班有 40 人, 每排 6 个人,每次收作业要求学号按顺序排列好之后交给老师, 方便统计. 请说出你的解决方案。

方案:

将各组作业一组一组放在一个列表中,采用希尔排序,间隔为6.

问题描述 2:

封装所有的排序算法到自定义模块 mySort,参考模块与包的知识, 实现打包功能。 如果可以发布到 pypi 网站上.


最新回复(0)