189.go 824 B

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