Rotate Array

Solution in Go

func rotate(nums []int, k int)  {
    if k == 0 || k == len(nums) {
        return
    }

    // Normalize 'k'
    k = k % len(nums)
    
    reverse(nums)       // Example: k = 2, [1,2,3,4,5] -> [5,4,3,2,1]
    reverse(nums[:k])   // Example: k = 2, [5,4,3,2,1] -> [4,5,3,2,1]
    reverse(nums[k:])   // Example: k = 2, [4,5,3,2,1] -> [4,5,1,2,3]
}

// reverse reverses a slice of integers
func reverse(arr []int) {
    for left, right := 0, len(arr) - 1; left < right; left, right = left + 1, right - 1 {
        arr[left], arr[right] = arr[right], arr[left]
    }
}

The solution here uses array reversal.

  1. Reverse entire array.
  2. Reverse array upto k.
  3. Reverse array from k till end.
Subscribe via email

Get notified once/twice per month when new articles are published.

Copyright © 2022 - 2024 TheDeveloperCafe.
The Go gopher was designed by Renee French.