189. Rotate Array (Easy)

https://leetcode.com/problems/rotate-array/

Given an array, rotate the array to the right by k steps, where k is non-negative.

Example 1:

Input: [1,2,3,4,5,6,7] and k = 3
Output: [5,6,7,1,2,3,4]
Explanation:
rotate 1 steps to the right: [7,1,2,3,4,5,6]
rotate 2 steps to the right: [6,7,1,2,3,4,5]
rotate 3 steps to the right: [5,6,7,1,2,3,4]

Example 2:

Input: [-1,-100,3,99] and k = 2
Output: [3,99,-1,-100]
Explanation: 
rotate 1 steps to the right: [99,-1,-100,3]
rotate 2 steps to the right: [3,99,-1,-100]

Note:

  • Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
  • Could you do it in-place with O(1) extra space?

Solutions

1.

class Solution {

    // Do 3 times of rotation

    public void rotate(int[] nums, int k) {
        if (nums == null || nums.length <= 1 || k == 0) {
            return;
        }

        int len = nums.length;

        // what if k > len
        k = k % len;

        inverse(nums, 0, len - 1);
        inverse(nums, 0, k-1);
        inverse(nums, k, len - 1);
    }

    public void inverse(int[] nums, int left, int right) {
        while (left < right) {
            swap(nums, left, right);
            left++;
            right--;
        }
    }

    private void swap(int[] nums, int x, int y) {
        int tmp = nums[x];
        nums[x] = nums[y];
        nums[y] = tmp;
    }
}

2.

class Solution {

    // TODO, Improvement needed.

    public void rotate(int[] nums, int k) {
        if (nums == null || nums.length <= 1 || k == 0) {
            return;
        }

        int len = nums.length;

        // what if k > len
        k = k % len;

        // for len = 4, k = 2, move elements of which index >=2, that is 2, 3
        for (int i = len - 1; i >= len - k; i--) {

            int tmp = nums[len - 1];

            for (int j = len - 2; j >= 0; j--) {
                nums[j + 1] = nums[j];
            }

            nums[0] = tmp;
        }
    }
}

Incorrect Solutions

References

Copyright © iovi.com 2017 all right reserved,powered by GitbookLast Modification: 2020-03-21 13:37:52

results matching ""

    No results matching ""