简述有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 ?
参考答案:
这个问题是一个经典的循环移位问题,通常用于处理数组或列表中的元素。给定一个包含n个整数的列表,我们的目标是将前m个元素移动到列表的末尾,同时保持列表中其他元素的相对顺序不变。
下面是一个简单的Python函数,用于实现这个操作:
def rotate_list(nums, m):
# 首先,确保m的值在有效范围内
m = m % len(nums)
# 使用切片操作实现循环移位
return nums[-m:] + nums[:-m]
# 示例用法
nums = [1, 2, 3, 4, 5, 6, 7]
m = 3
print(rotate_list(nums, m)) # 输出: [5, 6, 7, 1, 2, 3, 4]
这个函数首先通过取模操作确保m
的值在有效范围内(即0到n-1
之间)。然后,它使用Python的切片操作来将列表分为两部分:最后m
个元素和前面的元素。最后,通过将这两部分拼接在一起,实现了循环移位的效果。
这个算法的时间复杂度是O(n),其中n是列表的长度。这是因为我们需要遍历整个列表来执行切片和拼接操作。空间复杂度也是O(n),因为在最坏的情况下,我们可能需要创建一个新的列表来存储结果。然而,在Python中,切片操作通常是就地执行的,这意味着它不需要额外的空间。因此,在实际应用中,空间复杂度可能会更低。