校招 刷题
Posted meikon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了校招 刷题相关的知识,希望对你有一定的参考价值。
1.约瑟夫环问题
思路:python列表,处理时有一定优势,因为可以随意拼接。
以前用c++ 写过一个。用循环链表。只需要构建一个循环列表就好。构建循环链表需要麻烦一些,但循环列表就是处理起来很方便。链表的删除很方便。
python程序的思路;
利用列表的可拼接性。
第一个while:
如果人数大于报的数,则直接可以去除,然后把去除的两边在拼接起来。
第二个while:(重点)
人数小于报的数,需要把列表直接拼接,拼接的列表,一定要大于报的数长度,为了避免特殊情况,长度大于列表现有长度+报数值,有时间复杂度要求,也可以用注释的替代。
然后去除值,截取现有长度-1(这个也要注意),直到列表只剩一个元素。
lis = [ i for i in range(1,101)] print(lis) m = 5 while len(lis) >= m: lis.remove(lis[m-1]) lis = lis[m-1:]+lis[0:m-1]
while len(lis) > 1:
n = len(lis)
print(n)
print(lis)
# if n < m:
# ind = m // n + 1
# # print(lis)
# lis = lis*ind + lis
# print(lis)
while len(lis) < m+n:
lis += lis
# print(len(lis))
# print(m-1)
lis.remove(lis[m-1])
lis = lis[m-1:m+n-2]
print(lis)
以上是关于校招 刷题的主要内容,如果未能解决你的问题,请参考以下文章