返回

用 Python 巧妙旋转数组:三种方法大比拼

后端

LeetCode 189. 旋转数组(Python)




作为一名优秀的 Python 编码者,你一定遇到过需要旋转数组的情况。旋转数组是指将数组中的元素向左或向右移动一定数量的单位,从而产生一个新的数组。

LeetCode 189 就是一道经典的旋转数组题目,它要求你将一个给定的数组向右旋转 k 个单位。乍一看,这似乎是一个复杂的任务,但别担心,我们将逐步分解问题,让你轻松掌握三种旋转数组的 Python 方法。

方法一:巧用切片实现数组旋转

第一种方法简单直接,利用 Python 切片操作符来实现数组的旋转。这种方法的思路是:将数组的前 k 个元素切片出来,并将其添加到数组的末尾,这样就实现了数组向右旋转 k 个单位。

def rotate_array(nums, k):
    # 将数组的前 k 个元素切片出来
    kth_elements = nums[:k]

    # 将数组的前 k 个元素添加到数组的末尾
    nums[k:] = kth_elements

    # 返回旋转后的数组
    return nums

方法二:借助循环巧妙旋转数组

第二种方法使用循环来实现数组的旋转。这种方法的思路是:逐个元素地将数组中的元素向右移动 k 个单位,直到所有元素都移动到位。

def rotate_array(nums, k):
    # 循环移动数组中的元素
    for i in range(k):
        # 将数组的最后一个元素保存起来
        last_element = nums[-1]

        # 将数组中的所有元素向右移动一个单位
        for j in range(len(nums) - 1, 0, -1):
            nums[j] = nums[j - 1]

        # 将保存的最后一个元素添加到数组的开头
        nums[0] = last_element

    # 返回旋转后的数组
    return nums

方法三:巧妙利用 Python 内置函数实现数组旋转

第三种方法利用 Python 内置的 collections.deque 类来实现数组的旋转。collections.deque 类是一种双端队列,它支持在队列的两端进行元素的插入和删除操作。

from collections import deque

def rotate_array(nums, k):
    # 将数组转换为双端队列
    nums_deque = deque(nums)

    # 将双端队列向右旋转 k 个单位
    nums_deque.rotate(k)

    # 将双端队列转换回数组
    nums = list(nums_deque)

    # 返回旋转后的数组
    return nums

结语

至此,我们已经探索了三种旋转数组的 Python 方法。每种方法都有其独特的优势和适用场景。你可以根据自己的需要选择最合适的方法来解决 LeetCode 189 难题。

希望这篇文章对你有帮助。如果你还有任何问题,请随时留言,我会尽力解答。祝你编程愉快!