📜  数据结构|队列|问题4(1)

📅  最后修改于: 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)

由于需要用到队列,需要额外的空间来存储,所以空间复杂度为 O(n)。时间复杂度为 O(n),需要遍历两次数组,因此时间复杂度为线性级别。