- 题目大意:
将包含n个元素的数组向右旋转k步
例如,数组[1,2,3,4,5,6,7]包含元素个数n = 7,向右旋转k = 3步,得到[5,6,7,1,2,3,4]。
至少有3种不同的解题方法,最好使用O(1)的额外空间,“就地”完成数组旋转。 - 时间复杂度O(n),空间复杂度O(n)
class Solution(object):
def rotate(self, nums, k):
k = len(nums) - k % len(nums)
nums[:] = nums[k:] + nums[:k]
class Solution(object):
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: void Do not return anything, modify nums in-place instead.
"""
def reverse(nums, start, end):
while start < end:
nums[start], nums[end] = nums[end], nums[start]
start += 1
end -= 1
n = len(nums)
k %= n
reverse(nums, 0, n - k - 1)
reverse(nums, n - k, n - 1)
reverse(nums, 0, n - 1)
if __name__ == "__main__":
nums = [1, 2, 3, 4, 5, 6, 7]
Solution().rotate(nums, 10)
assert nums == [5, 6, 7, 1, 2, 3, 4]