189. 旋转数组
2019-12-30 本文已影响0人
Andysys
// 使用环状替换
public void rotate(int[] nums, int k) {
final int length = nums.length;
k = k % length;
int count = 0;
int current, prev, next, temp;
for (int start = 0; count < length; start++) {
current = start;
prev = nums[start];
do {
next = (current + k) % length;
temp = nums[next];
nums[next] = prev;
prev = temp;
current = next;
count++;
} while (start != current);
}
}
// 使用反转
public void rotate2(int[] nums, int k) {
final int length = nums.length;
k %= length;
reverse(nums, 0, length - 1);
reverse(nums, 0, k - 1);
reverse(nums, k, length - 1);
}
private void reverse(int[] nums, int start, int end) {
int temp;
while (start < end) {
temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start++;
end--;
}
}