Skip to content

Commit b0e40f3

Browse files
author
legolas.zhan
committed
s189: do it in-place with O(1) extra space
1 parent 0742487 commit b0e40f3

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

leetcode/array/rotate.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ Try to come up as many solutions as you can, there are at least 3 different ways
3939

4040
package larray
4141

42+
/*
4243
func rotate(nums []int, k int) {
4344
n := len(nums)
4445
c := make([]int, n)
@@ -50,3 +51,25 @@ func rotate(nums []int, k int) {
5051
nums[(i+k)%n] = v
5152
}
5253
}
54+
*/
55+
56+
func rotate(nums []int, k int) {
57+
n := len(nums)
58+
k = k % n
59+
if k == 0 {
60+
return
61+
}
62+
63+
var reverse func(nums []int, start, end int)
64+
reverse = func(nums []int, start, end int) {
65+
for start < end {
66+
nums[start], nums[end] = nums[end], nums[start]
67+
start++
68+
end--
69+
}
70+
}
71+
72+
reverse(nums, 0, n-1) // Reverse the entire array
73+
reverse(nums, 0, k-1) // Reverse the first k elements
74+
reverse(nums, k, n-1) // Reverse the remaining n - k elements
75+
}

0 commit comments

Comments
 (0)