
想到的
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;}}}
