返回
用 Python 巧妙旋转数组:三种方法大比拼
后端
2024-02-18 01:30:24
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 难题。
希望这篇文章对你有帮助。如果你还有任何问题,请随时留言,我会尽力解答。祝你编程愉快!