数列转换
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.
简单的就是把右数第k位开始的数列换到前面。这里我用一种较为有意思且简单的方法解决这个问题:
先后把两半的数列反向变换一下,
[1,2,3,4] -> [4,3,2,1] [5,6,7] -> [7,6,5]
整体的数列就变成:[4,3,2,1,7,6,5]
这个时候再整体变换一下就可以得到 [5,6,7,1,2,3,4]
public class Solution {
public void rotate(int[] nums, int k) {
int len = nums.length;
if(len == 0)
return ;
if((k %= len) == 0)
return ;
reverse(nums, 0, len - 1 -k);
reverse(nums, len - k, len - 1);
reverse(nums, 0, len - 1);
}
private void reverse(int[] nums, int head, int tail) {
while(tail > head) {
int temp = nums[tail];
nums[tail] = nums[head];
nums[head] = temp;
tail--;
head++;
}
}
}
自己定义一个类,方便使用。
第一次发博客,蛮新奇的,希望能给大家带来一些帮助。