package main func rotate1st(nums []int, k int) { n := len(nums) k %= n tmp := append(nums[n-k:], nums[:n-k]...) copy(nums, tmp) } func rotate2nd(nums []int, k int) { tmp := make([]int, len(nums)) copy(tmp, nums) n := len(nums) for i, v := range tmp { idx := (i + k) % n nums[idx] = v } } func rotate3rd(nums []int, k int) { n := len(nums) k %= n // [1 2 3] -> [3 2 1] for i, j := 0, n-k-1; i < j; i, j = i+1, j-1 { nums[i], nums[j] = nums[j], nums[i] } // [4 5 6 7] -> [7 6 5 4] for i, j := n-k, n-1; i < j; i, j = i+1, j-1 { nums[i], nums[j] = nums[j], nums[i] } // [3 2 1 7 6 5 4] -> [4 5 6 7 1 2 3] for i, j := 0, n-1; i < j; i, j = i+1, j-1 { nums[i], nums[j] = nums[j], nums[i] } } // func main() { // arr := []int{1, 2, 3, 4, 5, 6, 7} // rotate1st(arr, 4) // fmt.Println(arr) // }