package top100liked import ( "fmt" "slices" "testing" ) // https://leetcode.cn/problems/rotate-array/description/?envType=study-plan-v2&envId=top-100-liked func rotate(nums []int, k int) { if k == 0 { return } n := len(nums) slices.Reverse(nums) slices.Reverse(nums[:k%n]) slices.Reverse(nums[k%n:]) } // func rotate(nums []int, k int) { // n := len(nums) // k = k % n // if k == 0 { // return // } // count := 0 // 已经处理了多少个元素 // for start := 0; count < n; start++ { // current := start // prev := nums[start] // 暂存起点元素 // // 沿着环跳动 // for { // next := (current + k) % n // // 把 prev 放到 next 位置,同时保存 next 原来的值作为新的 prev // nums[next], prev = prev, nums[next] // current = next // count++ // if current == start { // break // 回到起点,这条环走完了 // } // } // } // } func TestS15(t *testing.T) { input := []int{1, 2, 3, 4, 5, 6, 7} rotate(input, 3) fmt.Printf("%+v\n", input) input = []int{-1, -100, 3, 99} rotate(input, 2) fmt.Printf("%+v\n", input) input = []int{-1} rotate(input, 2) fmt.Printf("%+v\n", input) }