Rotate an array of n elements to the rightby k steps.
For example, with n = 7 and k = 3, thearray [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].
翻译:一个数组经过k步实现转换
分析:想了两种方法,第一循环右移三位、第二,先全部反转,再0到k反转,再k到length反转。第一种方法写出来了,调试都是对的,在leetcode没通过的例子也能跑,不知道为什么不行,方法二写出来了。具体代码如下:
方法一:
public class Solution {
public void rotate(int[] nums, int k) {
/k=k%nums.length;
int[] nums1=new int[nums.length];
intlength=nums.length;
for(inti=0;i<length;i++){
nums1[(i+k)%length]=nums[i];
}
nums=nums1;
}
}
方法二:要注意两点,第一就是k的值应该与数组长度取余,第二就是在数组反转的时候也可以利用款速快速排序的思想,利用左右的两个指向进行交换。
public class Solution {
public static void reverse(int nums[],int from,int end){
if(from<end){
intlength=end-from;
for(inti=0;i<length/2;i++){
inttemp=nums[from+i];
nums[from+i]=nums[end-i-1];
nums[end-i-1]=temp;
}
}
}
public void rotate(int[] nums, int k) {
k=k%nums.length;
Solution.reverse(nums,0,nums.length);
Solution.reverse(nums,0,k);
Solution.reverse(nums,k,nums.length);
}
}