用一个额外的数组,存储这些偏移之后的数据
class Solution {
public void rotate(int[] nums, int k) {
int[] numSele = new int[nums.length];
for(int i = 0; i<nums.length;i++){
numSele[(i+k)%nums.length]=nums[i];
}
for(int i=0;i<nums.length;i++){
nums[i]=numSele[i];
}
}
}
空间复杂度O(1)的解法:
public void rotate(int[] nums, int k) {
int num = k % nums.length;
reverseTheArray(nums, 0, nums.length - 1);
reverseTheArray(nums, 0, num - 1);
reverseTheArray(nums, num, nums.length - 1);
}
public void reverseTheArray(int[] nums, int beginIndex, int endIndex) {
if (beginIndex > nums.length - 1 || endIndex > nums.length - 1) {
return;
}
while (beginIndex <= endIndex) {
int tempNum = nums[beginIndex];
nums[beginIndex] = nums[endIndex];
nums[endIndex] = tempNum;
beginIndex++;
endIndex--;
}
}