想到的
class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
int[] ans = new int[n];
for (int i = 0; i < n; ++i) {
ans[(i + k) % n] = nums[i];
}
System.arraycopy(ans, 0, nums, 0, n);
}
}
。。。脑子转不到双指针啊
数组翻转
举个栗子 原来数组是{1,2,3,4,5}右移2步变成{4,5,1,2,3}
那对原来数组反转:{5,4,3,2,1}这里显然5,4转一下,3,2,1转一下就是结果了
分界线(这里是4和3之间)刚好是k%(n-1)
代码如下:
class Solution {
public void rotate(int[] nums, int k) {
k %= nums.length;
reverse(nums, 0, nums.length - 1);//反整个
reverse(nums, 0, k - 1);//反前面
reverse(nums, k, nums.length - 1);//反后面
}
public void reverse(int[] nums, int start, int end) {
while (start < end) {//while不断的头尾交换
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start += 1;
end -= 1;
}
}
}