static void rotateByDelements(int[] a, int d) { // reverse the first part till d elements ReverseArray.reverseArray(a, 0, d - 1); // reverse the entire array ReverseArray.reverseArray(a, 0, a.length - 1); // reverse the second half after d elements to get the rotation ReverseArray.reverseArray(a, 0, a.length - 1 - d); }
public static void main(String[] args) { Integer[] arr = {1, 2, 3, 4, 5}; System.out.println("Array inserted {}"); for (int i = 0; i < arr.length; i++) // Used For-loop { System.out.print(" " + arr[i]); } ReverseArray reverseArray = new ReverseArray(); System.out.println(); System.out.println("Reversed Array {}"); Integer[] revArr = reverseArray.reverseArr(arr); for (int i = 0; i < revArr.length; i++) // Used For-loop { System.out.print(" " + revArr[i]); } }
// before: 1,2,3,4,5,6, shift: 2 // after: 5,6,1,2,3,4 // Time - O(N), Space - O(1) public int[] rotate(final int[] array, int shift) { if (array == null || shift < 0) { return null; } final ReverseArray reverseArray = new ReverseArray(); // adjust based on shift shift %= array.length; int shiftLength = array.length - shift; int actualLength = array.length - 1; // reverse non-shift elements reverseArray.reverse(array, 0, shiftLength - 1); // 4,3,2,1,|5,6 // reverse shift elements reverseArray.reverse(array, shiftLength, actualLength); // 4,3,2,1,|6,5 // reverse the entire array reverseArray.reverse(array, 0, actualLength); // 5,6|,1,2,3,4 return array; }