Given an array, rotate the array to the right by k steps, where k is non-negative.
方法一
开辟新数组,使用取余求下标的方法
class Solution {
public void rotate(int[] nums, int k) {
int[] temp=new int[nums.length];
for(int i=0;i<nums.length;i++){
temp[(i+k)%nums.length]=nums[i];
}
for(int i=0;i<nums.length;i++){
nums[i]=temp[i];
}
}
}
方法二
三次倒转法,①将前length-k位倒置 ②将最后k位倒置 ③整个数组倒置
class Solution {
public void rotate(int[] nums, int k) {
reverse(nums,0,nums.length-k%nums.length-1);
reverse(nums,nums.length-k%nums.length,nums.length-1);
reverse(nums,0,nums.length-1);
}
public void reverse(int[] array,int srcPos,int desPos){
while(srcPos<desPos){
int tmp=array[desPos];
array[desPos--]=array[srcPos];
array[srcPos++]=tmp;
}
}
}