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.
- Reverse entire array.
- Reverse array upto
k
. - Reverse array from
k
till end.