Algorithm


Problem Name: 189. Rotate Array

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

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

 

Example 1:

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]

Example 2:

Input: nums = [-1,-100,3,99], 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]

 

Constraints:

  • 1 <= nums.length <= 105
  • -231 <= nums[i] <= 231 - 1
  • 0 <= k <= 105
 

Code Examples

#1 Code Example with C Programming

Code - C Programming


#include <stdio.h>

void rotate(int nums[], int n, int k) {
    int i, j, c;
    i = j = 0;
    int pre = nums[i];
    int t;
    for(c = 0; c  <  n; c++) {
        i = (i + k) % n;
        t = nums[i];
        nums[i] = pre;
        pre = t;
        if (i == j) {
            i = ++j;
            pre = nums[i];
        }
    }
}

void transpose(int *matrix, int m, int n) {
    int i, j, c;
    i = j = 0;
    int pre = matrix[0];
    int t;
    for (c = 0; c  <  m * n - 1; c++) { /* pay attention it's m*n-1 */
        i = (i % n) * m + (i / n);
        t = matrix[i];
        matrix[i] = pre;
        pre = t;
        if (i == j) {
            i = ++j;
            pre = matrix[i];
        }
    }
}

void print(int nums[], int n) {
    int i;
    for (i = 0; i  <  n; i++) {
        printf("%d ", nums[i]);
    }
    printf("\n");
}

int main()
{
    int a[7] = {1, 2, 3, 4, 5, 6, 7};
    int n = 7;
    int k = 4;

    rotate(a, n, k);
    print(a, n);

    int b[6] = {1, 2, 3, 4, 5, 6};
    n = 6;
    k = 3;

    rotate(b, n, k);
    print(b, n);

    return 0;
}
Copy The Code & Try With Live Editor

Input

x
+
cmd
nums = [1,2,3,4,5,6,7], k = 3

Output

x
+
cmd
[5,6,7,1,2,3,4]

#2 Code Example with Java Programming

Code - Java Programming


class Solution {
  public void rotate(int[] nums, int k) {
    int n = nums.length;
    k %= n;
    int count = 0;
    for (int i = 0; count  <  n; i++) {
      int currIdx = i;
      int prevValue = nums[i];
      do {
        int nextIdx = (currIdx + k) % n;
        int tempValue = nums[nextIdx];
        nums[nextIdx] = prevValue;
        prevValue = tempValue;
        currIdx = nextIdx;
        count++;
      } while (i != currIdx);
    }
  }
}
Copy The Code & Try With Live Editor

Input

x
+
cmd
nums = [1,2,3,4,5,6,7], k = 3

Output

x
+
cmd
[5,6,7,1,2,3,4]

#3 Code Example with Javascript Programming

Code - Javascript Programming


const rotate = function(nums, k) {
  nums.unshift(...nums.splice(nums.length - k))
};
Copy The Code & Try With Live Editor

Input

x
+
cmd
nums = [-1,-100,3,99], k = 2

Output

x
+
cmd
[3,99,-1,-100]

#4 Code Example with Python Programming

Code - Python Programming


class Solution:
    def rotate(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        n=k%len(nums)
        nums[:] = nums[-n:] + nums[:-n]
Copy The Code & Try With Live Editor

Input

x
+
cmd
nums = [-1,-100,3,99], k = 2

Output

x
+
cmd
[3,99,-1,-100]

#5 Code Example with C# Programming

Code - C# Programming


namespace LeetCode
{
    public class _0189_RotateArray
    {
        public void Rotate(int[] nums, int k)
        {
            if (k >= nums.Length)
                k %= nums.Length;

            for (int start = 0, count = 0; start  <  k && count < nums.Length; start++)
            {
                int curr = start;
                var prev = nums[curr];
                do
                {
                    var next = curr + k;
                    if (next >= nums.Length)
                        next -= nums.Length;

                    var temp = nums[next];
                    nums[next] = prev;
                    prev = temp;
                    curr = next;

                    count++;
                } while (start != curr);
            }
        }
    }
}
Copy The Code & Try With Live Editor

Input

x
+
cmd
nums = [1,2,3,4,5,6,7], k = 3

Output

x
+
cmd
[5,6,7,1,2,3,4]
Advertisements

Demonstration


Previous
#188 Leetcode Best Time to Buy and Sell Stock IV Solution in C, C++, Java, JavaScript, Python, C# Leetcode
Next
#190 Leetcode Reverse Bits Solution in C, C++, Java, JavaScript, Python, C# Leetcode