189. Rotate Array

Description

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

Follow up:

  • 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?

Constraints

  • 1 <= nums.length <= 2 * 10^4

  • It's guaranteed that nums[i] fits in a 32 bit-signed integer.

  • k >= 0

Approach

  • GeeksforGeeks

  • ProgramCreek

  • YouTube

Examples

Input: nums = [1, 2, 3, 4, 5, 6, 7], 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]

Solutions

/**
 * Time complexity : O(n×k). All the numbers are shifted by one step(O(n)) 
 *    k times(O(n)).
 * Space complexity : O(1). No extra space is used.
 */

class Solution {
  public void rotate(int[] nums, int k) {
    // speed up the rotation
    k %= nums.length;
    int temp, previous;
    for (int i = 0; i < k; i++) {
      previous = nums[nums.length - 1];
      for (int j = 0; j < nums.length; j++) {
        temp = nums[j];
        nums[j] = previous;
        previous = temp;
      }
    }
  }
}

Follow up

Last updated

Was this helpful?