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

Popular posts from this blog

849. Maximize Distance to Closest Person

347. Top K Frequent Elements

139. Word Break