1. 程式人生 > >leetcode (Rotate Array)

leetcode (Rotate Array)

Title:Rotate Array    189

Difficulty:Easy

原題leetcode地址:https://leetcode.com/problems/rotate-array/

 

1. 詳細講解見程式碼註釋,時間&空間複雜度如下:

時間複雜度:O(n),最長需要遍歷整個陣列的長度。

空間複雜度:O(1),沒有額外申請空間。

    /**
     * 3次反轉
     *      1. 反轉K之前的數
     *      2. 反轉K之後的數
     *      3. 反轉整個陣列
     *   注意:題目給的K的大小可能比nums的長度大
     * @param nums
     * @param k
     */
    public static void rotate(int[] nums, int k) {

        int kk = k % nums.length;
        reverse(nums, 0, nums.length - kk - 1);
        reverse(nums, nums.length - kk, nums.length - 1);
        reverse(nums, 0, nums.length - 1);

    }

    private static void reverse(int nums[], int start, int end) {

        for (int i = start, j = end; i < j; i++, j--) {
            int tmp = nums[i];
            nums[i] = nums[j];
            nums[j] = tmp;
        }

    }