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]
