You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.1 KiB

package class32;
public class Problem_0189_RotateArray {
public void rotate1(int[] nums, int k) {
int N = nums.length;
k = k % N;
reverse(nums, 0, N - k - 1);
reverse(nums, N - k, N - 1);
reverse(nums, 0, N - 1);
}
public static void reverse(int[] nums, int L, int R) {
while (L < R) {
int tmp = nums[L];
nums[L++] = nums[R];
nums[R--] = tmp;
}
}
public static void rotate2(int[] nums, int k) {
int N = nums.length;
k = k % N;
if (k == 0) {
return;
}
int L = 0;
int R = N - 1;
int lpart = N - k;
int rpart = k;
int same = Math.min(lpart, rpart);
int diff = lpart - rpart;
exchange(nums, L, R, same);
while (diff != 0) {
if (diff > 0) {
L += same;
lpart = diff;
} else {
R -= same;
rpart = -diff;
}
same = Math.min(lpart, rpart);
diff = lpart - rpart;
exchange(nums, L, R, same);
}
}
public static void exchange(int[] nums, int start, int end, int size) {
int i = end - size + 1;
int tmp = 0;
while (size-- != 0) {
tmp = nums[start];
nums[start] = nums[i];
nums[i] = tmp;
start++;
i++;
}
}
}