# Find an element in array after rotating an array by k steps to the right

Rotate an array of n elements to the right by k steps and then find an element at particular position in array.

For example, with n = 5 and k = 3, the array [1,2,3,4,5] is rotated to [4,5,1,2,3]. Now after rotation we need element at position **3** which is **2**

Consider this array as a circle and take one pointer P which is pointing to start of the array, Initially pointer is pointing to P = 0, Find below image for more details.

Now we want to rotate an array by k = 3 steps, Lets assume instead of rotating entire array we will just change the pointer to P = 3

**NOTE: **Now **size** of an array is **5** and if we rotate an array by **10 or 15 or 20 .. steps** then our pointer will be at initial position **P = 0, **

Lets see what is the position of our pointer** after k steps. **

`POINTER = K % SIZE;`

Now to find an element at **particular position **in array we will use below equation.

**ELEMENT = array[POINTER+POSITION]** `// HERE WE MIGHT GET ARRAY_OUT_OF_BOUND exception, `

But what if **pointer = 3** and **position is also 3** then in above code we will get arrayOutOfBoundException, To avoid this we will use** % SIZE** it means we are continually rotating our pointer in circle. Thats the reason I asked to consider it as a **circle** not an **array**.

**ELEMENT = array[(POINTER+POSITION)%SIZE]**

Find entire algorithm below.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package com.omt.learn.algo; public class RotateArrayByElement { public static void main(String[] args) { int a[] = {1,2,3,4,5}; int numberOfElementRotation = 3; int findIntAtPosition = 3; // Starts with 0 System.out.println(elementAtAfterRotation(a, numberOfElementRotation, findIntAtPosition)); } public static int elementAtAfterRotation(int[] a,int rotation, int position) { int size = a.length; int pointer = rotation % size; int element = a[((pointer+position)%size)]; return element; } } |