旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入: [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:
输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释:
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]
说明:
- 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
- 要求使用空间复杂度为 O(1) 的原地算法。
In [1]:
class Solution:
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: void Do not return anything, modify nums in-place instead.
"""
length = len(nums)
k_v = k % length
nums[:] = nums[length-k_v:] + nums[:length-k_v]
在提交的时候一开始没有看清给定的返回值条件,直接 return nums 返回了。算是一个小插曲。
注意的是,直接用 nums = nums[length-k_v:] + nums[:length-k_v] 是无法修改外部的 nums 的数组的值的。
因为其是作用于本地作用域的一个变量赋值,所以这边需要使用切片将其赋值。这样才能达到修改外部数组值的效果
提交上去之后看了一下其他代码的写法。大同小异,想了想好像也没有什么可以优化的方法。就到此为止吧 :)
Comments !