String or Array Rotation
字符串、数组的反转、逆序问题
三步翻转法
// 3-step reverse - O(n) time, O(1) space
class Solution {
public void rotateRight(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 void rotateLeft(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);
}
private void reverse(int[] nums, int s, int t) {
while (s < t) {
int tmp = nums[s];
nums[s] = nums[t];
nums[t] = tmp;
s++;
t--;
}
}
}相关问题:
Last updated