-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLeetCode189.java
More file actions
77 lines (70 loc) · 1.85 KB
/
LeetCode189.java
File metadata and controls
77 lines (70 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import java.util.Arrays;
import java.util.Deque;
import java.util.LinkedList;
public class LeetCode189 {
public static void main(String[] args) {
int[] nums;
int k;
// 输入: nums = [1,2,3,4,5,6,7], k = 3
// 输出: [5,6,7,1,2,3,4]
nums = new int[] { 1, 2, 3, 4, 5, 6, 7 };
k = 3;
new Solution189_3().rotate(nums, k);
System.out.println(Arrays.toString(nums));
// 输入:nums = [-1,-100,3,99], k = 2
// 输出:[3,99,-1,-100]
nums = new int[] { -1, -100, 3, 99 };
k = 2;
new Solution189_3().rotate(nums, k);
System.out.println(Arrays.toString(nums));
}
}
/**
* 双向队列
*/
class Solution189_1 {
public void rotate(int[] nums, int k) {
Deque<Integer> deque = new LinkedList<>();
for (int i = 0; i < nums.length; i++) {
deque.offer(nums[i]);
}
while (k > 0) {
deque.push(deque.pollLast());
k--;
}
for (int i = 0; i < nums.length; i++) {
nums[i] = deque.pop();
}
}
}
/**
* 辅助数组
*/
class Solution189_2 {
public void rotate(int[] nums, int k) {
int n = nums.length;
int[] newArr = new int[n];
for (int i = 0; i < n; ++i) {
newArr[(i + k) % n] = nums[i];
}
System.arraycopy(newArr, 0, nums, 0, n);
}
}
/**
* 通过反转数组
*/
class Solution189_3 {
public void rotate(int[] nums, int k) {
k = k % nums.length;
reverse(0, nums.length - 1, nums);
reverse(0, k - 1, nums);
reverse(k, nums.length - 1, nums);
}
private void reverse(int i, int j, int[] nums) {
for (int k = 0; k < (j - i + 1) / 2; k++) {
int temp = nums[i + k];
nums[i + k] = nums[j - k];
nums[j - k] = temp;
}
}
}