一、题目描述
给定一个整数数组 nums
,将数组中的元素向右轮转 k
个位置,其中 k
是非负数。
示例 1
输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]
示例 2
输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]
提示:
1 <= nums.length <= 10^5
-2^31 <= nums[i] <= 2^31 - 1
0 <= k <= 10^5
二、代码
代码如下:文章来源:https://www.toymoban.com/news/detail-528550.html
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
length = len(nums)
nums[:] = nums[length-(k % length):] + nums[:length-(k % length)]
print(nums)
三、解题思路
本题题意很简单,实际上需要操作的是将已知数组nums的后k位给挪到nums数组的首部且保证是原地修改。本题解采用切片的方式来移动数组,需要注意的是,如果仅仅使用nums = nums[length-(k % length):] + nums[:length-(k % length)]
实际上并没有进行原地修改,这是因为这行代码创建了一个新的列表,将原始数组的后面k
个元素与原始数组的所有元素连接起来。然后,将这个新的列表赋值给了变量nums
。但是,这并不会修改原始数组nums
,而是创建了一个新的列表对象并将其赋给了同名的变量nums
。因此,修改nums
的操作并不会影响原始的数组。
要做到原地修改的话,则需要将nums
改为nums[:]
。
另外,需要注意的是k
值的大小,如果k
值大于length
的话,则表示已经轮转过一周甚至几周了,需要对其进行一个求余操作才能正确的轮转对应的位置。文章来源地址https://www.toymoban.com/news/detail-528550.html
到了这里,关于189. 轮转数组 Python的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!