</>

Technology

Java Programs

Difficulty

Intermediate

Interview Question

Write a Java program to rotate an array left and right by K positions.

Answer

Rotate Array Left and Right

Left Rotation by K Positions

Java
import java.util.Arrays;

public class RotateArray {

    // Left rotate: shift all elements left by 1, move first to end
    public static void leftRotateByOne(int[] arr) {
        int first = arr[0];
        for (int i = 0; i < arr.length - 1; i++) {
            arr[i] = arr[i + 1];
        }
        arr[arr.length - 1] = first;
    }

    public static void leftRotate(int[] arr, int k) {
        int n = arr.length;
        k = k % n;  // handle k > n
        for (int i = 0; i < k; i++) {
            leftRotateByOne(arr);
        }
    }

    public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5 };
        System.out.println("Original:     " + Arrays.toString(arr));

        leftRotate(arr, 2);
        System.out.println("Left by 2:    " + Arrays.toString(arr));
        // → [3, 4, 5, 1, 2]
    }
}

Output

CODE
Original:  [1, 2, 3, 4, 5]
Left by 2: [3, 4, 5, 1, 2]

Efficient Rotation Using Reversal Algorithm (O(n), O(1))

Java
public static void reverse(int[] arr, int left, int right) {
    while (left < right) {
        int temp = arr[left];
        arr[left++] = arr[right];
        arr[right--] = temp;
    }
}

public static void leftRotateEfficient(int[] arr, int k) {
    int n = arr.length;
    k = k % n;
    reverse(arr, 0, k - 1);      // Step 1: reverse first k
    reverse(arr, k, n - 1);      // Step 2: reverse remaining
    reverse(arr, 0, n - 1);      // Step 3: reverse whole array
}

public static void rightRotateEfficient(int[] arr, int k) {
    int n = arr.length;
    k = k % n;
    reverse(arr, 0, n - 1);      // Step 1: reverse whole array
    reverse(arr, 0, k - 1);      // Step 2: reverse first k
    reverse(arr, k, n - 1);      // Step 3: reverse remaining
}

// Test
int[] arr1 = { 1, 2, 3, 4, 5 };
leftRotateEfficient(arr1, 2);
System.out.println("Left by 2:  " + Arrays.toString(arr1));  // [3, 4, 5, 1, 2]

int[] arr2 = { 1, 2, 3, 4, 5 };
rightRotateEfficient(arr2, 2);
System.out.println("Right by 2: " + Arrays.toString(arr2));  // [4, 5, 1, 2, 3]

Simple Approach Using Temp Array

Java
public static int[] rotateLeft(int[] arr, int k) {
    int n = arr.length;
    k = k % n;
    int[] result = new int[n];

    for (int i = 0; i < n; i++) {
        result[(i - k + n) % n] = arr[i];
    }
    return result;
}

public static int[] rotateRight(int[] arr, int k) {
    int n = arr.length;
    k = k % n;
    int[] result = new int[n];

    for (int i = 0; i < n; i++) {
        result[(i + k) % n] = arr[i];
    }
    return result;
}

Using Collections.rotate()

Java
import java.util.*;

List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Collections.rotate(list, 2);   // right rotate by 2
System.out.println(list);      // [4, 5, 1, 2, 3]

Collections.rotate(list, -2);  // left rotate by 2
System.out.println(list);      // [1, 2, 3, 4, 5]

Follow AutomateQA