文章目录
算法练习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]]
high
.sort
(key
=lambda data
: data
[1], reverse
=False)
high
.sort
(key
=lambda data
: data
[0], reverse
=True)
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])
dp1
.append
((max(temp
), min(temp
)))
dp
= dp1
print(max([max(each
) for each
in dp
]))
question4
问题描述 1:
全班有 40 人, 每排 6 个人,每次收作业要求学号按顺序排列好之后交给老师, 方便统计. 请说出你的解决方案。
方案:
将各组作业一组一组放在一个列表中,采用希尔排序,间隔为6.
问题描述 2:
封装所有的排序算法到自定义模块 mySort,参考模块与包的知识, 实现打包功能。 如果可以发布到 pypi 网站上.