方法一(超时):
class Solution {
public void rotate(int[] nums, int k) {
int l = nums.length;
k = k % l;
for(int i=0;i<k;i++){
int temp = nums[l-1];
for(int j=l-1;j>0;j--){
nums[j] = nums[j-1];
}
nums[0] = temp;
}
}
}
方法二:新建一个数组存储原数据
class Solution {
public void rotate(int[] nums, int k) {
int l = nums.length;
int[] temp = new int[l];
k = k % l;
for(int i=0;i<l;i++){
temp[i] = nums[i];
}
for(int i=0;i<l;i++) {
nums[(i + k) % l] = temp[i];
}
}
}
方法三:翻转
class Solution {
public void rotate(int[] nums, int k) {
int l = nums.length;
k = k % l;
reverse(nums,0,l-1);
reverse(nums,0,k-1);
reverse(nums,k,l-1);
}
private void reverse(int[]nums,int start,int end){
while(start<end){
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start++;
end--;
}
}
}
注:k = k % l