旋转数组
程序员文章站
2024-03-23 18:33:10
...
将包含 n 个元素的数组向右旋转 k 步。
例如,如果 n = 7 , k = 3,给定数组 [1,2,3,4,5,6,7]
,向右旋转后的结果为 [5,6,7,1,2,3,4]
。
注意:
尽可能找到更多的解决方案,这里最少有三种不同的方法解决这个问题。
提示:
要求空间复杂度为 O(1)
观察旋转前后的数组,发现就是前n-k个数和后k个数换位置,因为要求空间复杂度为O(1),所以可以通过将前n-k个数组前后反转,再将后k个数组前后反转,最后将整个数组前后反转得到旋转后的数组。
开始版本:
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: void Do not return anything, modify nums in-place instead.
"""
n = len(nums)
if n == 0 or k == 0:
return None
k = k % n
nums[:n-k] = reversed(nums[:n-k])
nums[n-k:] = reversed(nums[n-k:])
nums.reverse()
提交后发现一个大佬的版本速度更快更简洁:
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: void Do not return anything, modify nums in-place instead.
"""
n = len(nums)
k = k % n
nums[:k],nums[k:] = nums[n-k:],nums[:n-k]
看来还需要继续努力!上一篇: python break跳出多重循环
下一篇: linux操作系统常用操纵命令