Given an array, cyclically rotate the array clockwise by N elements. The conditions are
METHOD-2:
OUTPUT:
- Should NOT use temporary array to store values
- N should be > 0 and <= given array size
Sample:
We will see how to rotate the array by two ways.
METHOD-1:
- 1st lets see simple solution that takes 1st element and swap with last element for N times and each time array values will be moved 1 position front like arr[i] = arr[i+1]
- 2nd lets see swapping 0th to xth all elements, next swapping all from xth to last element and finally swapping all elements from 0th to last element with 3 for loops independently.
METHOD-1:
public class ArrayRotate { public static void main(String[] args) { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; printArray("BEFORE ROTATE :::: ", array); rotate(array, 5); printArray("AFTER ROTATE ::::: ", array); } private static void printArray(String txt, int array[]) { System.out.print(txt + " ::: "); for (int i : array) { System.out.print(i + ", "); } System.out.println(); } private static void rotate(int[] array, int startLoc) { if (startLoc < 0 || startLoc > array.length) { System.out.println("Out of array index !!!"); return; } for (int i = 0; i < startLoc - 1; i++) { int tmp = array[0]; for (int j = 0; j < array.length - 1; j++) { array[j] = array[j + 1]; } array[array.length - 1] = tmp; } } }
OUTPUT:
BEFORE ROTATE :::: ::: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, AFTER ROTATE ::::: ::: 5, 6, 7, 8, 9, 10, 1, 2, 3, 4,
METHOD-2:
public class RotateArray { public static void main(String[] args) { int array[] = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; printArray("BEFORE ROTATE :::: ", array); rotate(array, 5); printArray("AFTER ROTATE ::::: ", array); } private static void printArray(String txt, int array[]) { System.out.print(txt + " ::: "); for (int i : array) { System.out.print(i + ", "); } System.out.println(); } private static void rotate(int[] array, int startLoc) { if (startLoc < 0 || startLoc > array.length) { System.out.println("Out of array index !!!"); return; } for(int i=0,j=startLoc-2;i<j;i++,j--) { int tmp = array[i]; array[i] = array[j]; array[j] = tmp; } for(int i=startLoc-1,j=array.length-1;i<j;i++,j--) { int tmp = array[i]; array[i] = array[j]; array[j] = tmp; } for(int i=0,j=array.length-1;i<j;i++,j--) { int tmp = array[i]; array[i] = array[j]; array[j] = tmp; } } }
OUTPUT:
BEFORE ROTATE :::: ::: 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, AFTER ROTATE ::::: ::: 15, 16, 17, 18, 19, 20, 11, 12, 13, 14,
No comments:
Write comments