Rotate Array
LeetCode 189 · View on LeetCode
Rotate an array right by k positions using three reverses. O(n) time, O(1) space. Reverse the whole array, then reverse the first k elements, then reverse the rest.
package main
import "fmt"
func rotate(nums []int, k int) {
k %= len(nums)
reverse := func(l, r int) {
for l < r {
nums[l], nums[r] = nums[r], nums[l]
l++
r--
}
}
reverse(0, len(nums)-1)
reverse(0, k-1)
reverse(k, len(nums)-1)
}
func main() {
nums := []int{1, 2, 3, 4, 5, 6, 7}
fmt.Println(nums) // [1 2 3 4 5 6 7]
rotate(nums, 3)
fmt.Println(nums) // [5 6 7 1 2 3 4]
}