标签:
Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7]
is rotated to [5,6,7,1,2,3,4]
.
Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
Related problem: Reverse Words in a String II
三次reverse: 时间复杂度O(n), 空间复杂度O(1)
reverse(nums, 0, length - k - 1)
reverse(nums, length - k, length - 1)
reverse(nums, 0, length - 1)
这里还用到一个trick,交换变量不用额外空间:
a = a ^ b
b = a ^ b
a = a ^ b
使用异或避免溢出
public class Solution {
public void rotate(int[] nums, int k) {
k = k % nums.length;
int length = nums.length;
reverse(nums, 0, length - k - 1);
reverse(nums, length - k, length - 1);
reverse(nums, 0, length - 1);
}
public void reverse(int[] nums, int i, int j) {
while (i < j) {
nums[i] ^= nums[j];
nums[j] = nums[i] ^ nums[j];
nums[i] = nums[i] ^ nums[j];
i++;
j--;
}
}
}
标签:
原文地址:http://www.cnblogs.com/shini/p/4401353.html