1.png

想到的

  1. class Solution {
  2. public void rotate(int[] nums, int k) {
  3. int n = nums.length;
  4. int[] ans = new int[n];
  5. for (int i = 0; i < n; ++i) {
  6. ans[(i + k) % n] = nums[i];
  7. }
  8. System.arraycopy(ans, 0, nums, 0, n);
  9. }
  10. }

。。。脑子转不到双指针啊

今天虚了,明天继续

数组翻转

举个栗子 原来数组是{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)
代码如下:

  1. class Solution {
  2. public void rotate(int[] nums, int k) {
  3. k %= nums.length;
  4. reverse(nums, 0, nums.length - 1);//反整个
  5. reverse(nums, 0, k - 1);//反前面
  6. reverse(nums, k, nums.length - 1);//反后面
  7. }
  8. public void reverse(int[] nums, int start, int end) {
  9. while (start < end) {//while不断的头尾交换
  10. int temp = nums[start];
  11. nums[start] = nums[end];
  12. nums[end] = temp;
  13. start += 1;
  14. end -= 1;
  15. }
  16. }
  17. }