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].
大致的意思是数组向右旋转K次
解法1: 内存占用少, 但是时间上效率低点,
public class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
k = k % n;
if(n == 1 || k <= 0)
return;
if(k == n) {
reverse(nums, 0, n-1);
} else {
reverse(nums, 0, n-k-1);
reverse(nums, n-k, n-1);
reverse(nums, 0, n-1);
}
}
private void reverse(int[] nums, int start, int end) {
for(int i = start , j = end; i != j;) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
if(i+1 == j) {
break;
}
i++;
j--;
}
}
}
解法2:内存空间占用会大点,但是时间上效率高点
public class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
k = k % n;
if(n == 1 || k <= 0)
return;
int[] tmp = new int[n];
System.arraycopy(nums, n-k,tmp,0,k);
System.arraycopy(nums, 0,tmp,k,n-k);
System.arraycopy(tmp, 0,nums,0,n);
}
}