LeetCode-第189题:Rotate Array
题目详情
题目解释
题目的意思是将给定的数组右移k步,超出数组上界的元素填补数组下界空出的位置,如:
nums=[1,2,3,4,5,6,7];k=3;
k=1:nums=[7,1,2,3,4,5,6];
k=2:nums=[6,7,1,2,3,4,5];
k=3:nums=[5,6,7,1,2,3,4].
题目提示尽可能的想出更多的方法。
Java源码
class Solution {
public void rotate(int[] nums, int k) {
int arrayLength = nums.length;//数组的长度
//求实际需要移动的长度,如给的是k=12,实际只需移动12 % arrayLength
//给的是3,实际只需移动3 % arrayLength
int actualMove = k % arrayLength;
//创建一个临时数组用于存放最后的几个元素,因为他们最先被覆盖
int[] temp = new int[actualMove];
for(int i=0;i<temp.length;i++){
temp[i]=nums[arrayLength-actualMove+i];
}
//开始移动
for(int i=arrayLength-actualMove-1;i>=0;i--){
nums[i+actualMove]=nums[i];
}
//将之前临时保存的数组放回nums数组
for(int i=0;i<temp.length;i++){
nums[i]=temp[i];
}
}
}