189. Rotate Array
Given an array, rotate the array to the right by
k
steps, where k
is non-negative.def rotate(nums: List[int], k: int):
L = len(nums)
k %= L
start = 0
moved = 0
while moved < L:
curIndex = start
displaced = nums[start]
while True:
moveTo = (curIndex + k) % L
nums[moveTo], displaced = displaced, nums[moveTo]
curIndex = moveTo
moved += 1
if curIndex == start: # Wrapped Around!
break
start += 1
def reverse(nums: list, start: int, end: int):
while start < end:
nums[start], nums[end] = nums[end], nums[start]
start, end = start + 1, end - 1
def rotate(self, nums: List[int], k: int):
n = len(nums) k %= n
reverse(nums, 0, n - 1)
reverse(nums, 0, k - 1)
reverse(nums, k, n - 1)
Comments
Post a Comment