28、你拿到一个很长的未排序列表并被要求进行搜索。a. 你会使用哪种搜索算法?b. 如果你被告知需要多次搜索该列表,你的搜索策略会改变吗?如果会,如何改变?c. 若要改变策略,你会在什么情况下改变?
- a. 由于列表未排序,应使用线性搜索算法。
- b. 如果需要多次搜索该列表,策略会改变。可以先对列表进行排序,然后使用二分搜索算法。因为线性搜索平均时间复杂度是O(n),而二分搜索是O(log(n)),多次搜索时二分搜索能显著减少比较次数。
- c. 当搜索操作频繁,而列表更新操作不频繁时,就可以改变策略,先排序再用二分搜索。
29、生成一个包含 0 到 10 范围内整数的 100 元素列表。分别使用选择排序和基数排序对该列表进行排序。a. 哪种排序更快?为什么?b. 再次进行此操作,但列表元素数量变为 10000 个。记录相对差异。为什么会存在这种差异?
a. 对于 100 元素列表,基数排序可能更快。因为选择排序平均时间复杂度为 $O(n^2)$,而基数排序时间复杂度为 $O(d(n + k))$,这里 $d$ 是最大数字位数,$k$ 是基数,在 0 - 10 范围整数排序中,基数排序效率更高。
b. 对于 10000 元素列表,基数排序相对选择排序的优势会更明显。因为随着元素数量 $n$ 增大,选择排序的 $O(n^2)$ 复杂度使得运行时间增长更快,而基数排序复杂度增长相对平缓。
30、使用split方法将以下字符串分隔成单个单词并显示:my_string = “Roses!are!red!Violets!are!blue”
以下是实现该功能的代码:
my_string = "Roses!are!red!Violets!are!blue"
arr = my_string.split("!")
puts arr
这段代码首先定义了一个字符串 my_string ,然后使用 split 方法以 ! 为分隔符将字符串分割成数组 arr ,最后使用 puts 方法显示数组中的每个元素。
31、你正在为一款在线电脑游戏编写注册程序的一部分。编写一个程序,提示用户输入其用户 ID 和密码,并执行以下限制:a. 用户 ID 和密码必须至少有七个字符长。b. 密码必须至少包含以下每一项中的一个:大写字符、小写字符、数字和符号。提示:使用字符串类的文档。
以下是一个满足要求的 Python 示例代码:
import re
while True:
user_id = input('请输入用户 ID:')
if len(user_id) < 7:
print('用户 ID 必须至少有七个字符长,请重新输入。')
continue
password = input('请输入密码:')
if len(password) < 7:
print('密码必须至少有七个字符长,请重新输入。')
continue
if not re.search(r'[A-Z]', password):
print('密码必须包含至少一个大写字符,请重新输入。')
continue
if not re.search(r'[a-z]', password):
print('密码必须包含至少一个小写字符,请重新输入。')
continue
if not re.search(r'[0-9]', password):
print('密码必须包含至少一个数字,请重新输入。')
continue
if not re.search(r'[!@#$%^&*(),.?":{}|<>]', p

最低0.47元/天 解锁文章

1237

被折叠的 条评论
为什么被折叠?



