189. 旋转数组

126 阅读1分钟

题目描述

思路

1. 非原地,另开空间

2. 原地,分多次反转数组

代码

  • 注意要先将k给取余数,相当于把整个数组循环整数次后,剩下的旋转个数。
class Solution {
    public void rotate(int[] nums, int k) {
        int n = k % nums.length; // 注意
        reverse(nums, 0, nums.length - 1);
        reverse(nums, 0, n - 1);
        reverse(nums, n, nums.length - 1);
    }

    public void reverse(int[] nums, int start, int end) {
        int i = start, j = end;
        while (i < j) {
            int tmp = nums[i];
            nums[i] = nums[j];
            nums[j] = tmp;
            i++;
            j--;
        }
    }
}