设计一个算法,对一个列表从起始位置起每m个元素进行一次
设计一个算法,对一个列表从起始位置起每m个元素进行一次逆置,并分析其时间复杂度。如对列表【1,2,3,4,5,6,7,8,9,10】每4个元素进行一次逆置,则列表变为【4,3,2,1,8,7,6,5,10,9】
答案
def reverse_per_m(lst, m): res = lst.copy() n = len(res) for i in range(0, n, m): low = i high = min(i + m - 1, n - 1) # 不管块大小,只要low<high就翻转 while low < high: res[low], res[high] = res[high], res[low] low += 1 high -= 1 return res arr = [1,2,3,4,5,6,7,8,9,10] print(reverse_per_m(arr,4)) #输出:[4, 3, 2, 1, 8, 7, 6, 5, 10, 9]