问题描述:
对数组进行旋转,举个例子k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4]。
解决:这道题有挺多解法的,我这里写一种我认为比较巧妙的方法。
1.对整个数组翻转[1, 2, 3, 4, 5, 6, 7]->[7, 6, 5, 4, 3, 2, 1]
2.对前k个元素翻转[5, 6, 7, 4, 3, 2, 1]
3.对后length-k个元素翻转[5, 6, 7, 1, 2, 3, 4]
还是比较巧妙的
/*
* 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]
*/
public class RotateArray {
public void rotate(int[] nums, int k) {
k = k%nums.length;
int temp;
//整体翻转
for(int i=0, j=nums.length-1; i<j; i++,j--) {
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
//前k个数翻转
for(int i=0, j=k-1; i<j; i++,j--) {
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
//后nums.length-k个数翻转
for(int i=k, j=nums.length-1; i<j; i++,j--) {
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}