189.go 812 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func rotate1st(nums []int, k int) {
  6. n := len(nums)
  7. tmp := append(nums[n-k:], nums[:n-k]...)
  8. copy(nums, tmp)
  9. }
  10. func rotate2nd(nums []int, k int) {
  11. tmp := make([]int, len(nums))
  12. copy(tmp, nums)
  13. n := len(nums)
  14. for i, v := range tmp {
  15. idx := (i + k) % n
  16. nums[idx] = v
  17. }
  18. }
  19. func rotate3rd(nums []int, k int) {
  20. n := len(nums)
  21. // [1 2 3] -> [3 2 1]
  22. for i, j := 0, n-k-1; i < j; i, j = i+1, j-1 {
  23. nums[i], nums[j] = nums[j], nums[i]
  24. }
  25. // [4 5 6 7] -> [7 6 5 4]
  26. for i, j := n-k, n-1; i < j; i, j = i+1, j-1 {
  27. nums[i], nums[j] = nums[j], nums[i]
  28. }
  29. // [3 2 1 7 6 5 4] -> [4 5 6 7 1 2 3]
  30. for i, j := 0, n-1; i < j; i, j = i+1, j-1 {
  31. nums[i], nums[j] = nums[j], nums[i]
  32. }
  33. }
  34. func main() {
  35. arr := []int{1, 2, 3, 4, 5, 6, 7}
  36. rotate1st(arr, 4)
  37. fmt.Println(arr)
  38. }