📅  最后修改于: 2023-12-03 14:54:56.961000             🧑  作者: Mango
给定一个数组 nums,将该数组中的元素向右移动 k 个位置,其中 k 是非负数。
输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
通过队列的先进先出的特性,将数组中的元素放入队列中,然后取出 k 个元素放到数组的头部。
def rotate(nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: void Do not return anything, modify nums in-place instead.
"""
length = len(nums)
k = k % length
queue = []
for i in range(length):
queue.append(nums[i])
for j in range(k):
queue.insert(0, queue.pop())
for n in range(length):
nums[n] = queue[n]
由于需要用到队列,需要额外的空间来存储,所以空间复杂度为 O(n)。时间复杂度为 O(n),需要遍历两次数组,因此时间复杂度为线性级别。