189.go 828 B

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