Rotating an array by D places GFG

 package com.company;


import java.util.Arrays;

public class Array9 {
// Efficient method
public static int[] reverse(int[] arr, int low, int high) {
while (high > low) {
int a = arr[low];
arr[low] = arr[high];
arr[high] = a;
low++;
high--;
}
return arr;
}

public static int[] leftRotate(int[] arr, int d) {
int n = arr.length;
reverse(arr,0,d-1);
reverse(arr,d,n-1);
reverse(arr,0,n-1);
return arr;
}
// Right rotate an array by one
// public static int[] rotateAnArrayByOne(int[] arr, int d) {
// int n = arr.length;
// int a = arr[n - d];
// for (int i = 0; i < n - d; i++) {
// arr[n - d - i] = arr[n - d - i - 1];
// }
// arr[0] = a;
// return arr;
// }
//
// // Efficient solution by me
// public static int[] rotating(int[] arr, int d) {
// int n = arr.length;
// for (int i = 0; i < d; i++) {
// int a = arr[i];
// arr[i] = arr[n - d + i];
// arr[n - d + i] = a;
// }
// rotateAnArrayByOne(arr,d);
// return arr;
// }

// Naive solution
public static int[] leftRotateByOne(int[] arr) {
int n = arr.length;
int temp = arr[0];
for (int i = 1; i < n; i++) {
arr[i - 1] = arr[i];
}
arr[n - 1] = temp;
return arr;
}

public static int[] leftRotateAnArrayByD(int[] arr, int d) {
int n = arr.length;
for (int i = 0; i < d; i++) {
leftRotateByOne(arr);
}
return arr;
}

// Left rotate an array by D places --->MY SOLUTION
public static int[] rotate(int[] arr, int d) {
int n = arr.length;
int[] array = new int[d];
for (int j = 0; j < d; j++) {
array[j] = arr[j];
}
for (int i = 0; i < n - d; i++) {
arr[i] = arr[d + i];
}
for (int i = 0; i < d; i++) {
arr[n - d + i] = array[i];
}
return arr;
}

public static void main(String[] args) {
int[] ar = {10, 5, 30, 15};
System.out.println(Arrays.toString(leftRotate(ar, 3)));
}
}

Comments