Skip to content
This repository was archived by the owner on Sep 20, 2023. It is now read-only.

Commit 9a45a90

Browse files
aQuaaQua
aQua
authored and
aQua
committed
189 improve
最快的答案是三次翻转
1 parent ddc4480 commit 9a45a90

File tree

3 files changed

+44
-7
lines changed

3 files changed

+44
-7
lines changed

Algorithms/0189.rotate-array/README.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ Could you do it in-place with O(1) extra space?
1717
Related problem: [Reverse Words in a String II](https://leetcode.com/problems/reverse-words-in-a-string-ii/)
1818

1919
## 解题思路
20+
### 三次翻转
21+
1. nums 整体翻转
22+
1. nums[:k] 翻转
23+
1. nums[k:] 翻转
2024

21-
25+
### 递归交换
2226
见程序注释
+21-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,26 @@
11
package Problem0189
22

33
func rotate(nums []int, k int) {
4-
for i := 0; i < k; i++ {
5-
temp := nums[len(nums)-1]
6-
for j := len(nums) - 1; j > 0; j-- {
7-
nums[j] = nums[j-1]
8-
}
9-
nums[0] = temp
4+
// 我已经假定 k >= 0
5+
6+
n := len(nums)
7+
8+
if k > n {
9+
k %= n
10+
}
11+
if k == 0 || k == n {
12+
return
13+
}
14+
15+
reverse(nums, 0, n-1)
16+
reverse(nums, 0, k-1)
17+
reverse(nums, k, n-1)
18+
}
19+
20+
func reverse(nums []int, i, j int) {
21+
for i < j {
22+
nums[i], nums[j] = nums[j], nums[i]
23+
i++
24+
j--
1025
}
1126
}

Algorithms/0189.rotate-array/rotate-array_test.go

+18
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,24 @@ func Test_Problem0189(t *testing.T) {
2828

2929
qs := []question{
3030

31+
question{
32+
para{
33+
[]int{1, 2, 3, 4, 5, 6, 7}, 14,
34+
},
35+
ans{
36+
[]int{1, 2, 3, 4, 5, 6, 7},
37+
},
38+
},
39+
40+
question{
41+
para{
42+
[]int{1, 2, 3, 4, 5, 6, 7}, 7,
43+
},
44+
ans{
45+
[]int{1, 2, 3, 4, 5, 6, 7},
46+
},
47+
},
48+
3149
question{
3250
para{
3351
[]int{1, 2, 3, 4, 5, 6, 7}, 3,

0 commit comments

Comments
 (0)