Mth element after K Right Rotations of an Array

Given non-negative integers K, M, and an array arr[ ] consisting of N elements, the task is to find the Mth element of array after K right rotations.
Examples: 

Input: arr[] = {3, 4, 5, 23}, K = 2, M = 1 
Output:
Explanation: 
The array after first right rotation a1[ ] = {23, 3, 4, 5} 
The array after second right rotation a2[ ] = {5, 23, 3, 4} 
1st element after 2 right rotations is 5.
Input: arr[] = {1, 2, 3, 4, 5}, K = 3, M = 2 
Output:
Explanation: 
The array after 3 right rotations has 4 at its second position. 

Naive Approach: 
The simplest approach to solve the problem is to Perform Right Rotation operation K times and then find the Mth element of the final array. 
Time Complexity: O(N * K) 
Auxiliary Space: O(N)
Efficient Approach: 
To optimize the problem, the following observations need to be made: 

  • If the array is rotated N times it returns the initial array again. 
     

 
 

For example, a[ ] = {1, 2, 3, 4, 5}, K=5 
Modifed array after 5 right rotation a5[ ] = {1, 2, 3, 4, 5}. 



 

  • Therefore, the elements in the array after Kth rotation is the same as the element at index K%N in the original array.
  • If K >= M, the Mth element of the array after K right rotations is 
     

 
 

{ (N-K) + (M-1) } th element in the original array. 

 

  • If K < M, the Mth element of the array after K right rotations is: 
     

 
 

(M – K – 1) th  element in the original array. 

 

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to implement
// the above approach
#include<bits/stdc++.h>
using namespace std;
  
// Function to return Mth element of
// array after k right rotations
int getFirstElement(int a[], int N,
                    int K, int M)
{
    // The array comes to original state
    // after N rotations
    K %= N;
    int index;
  
    // If K is greater or equal to M
    if (K >= M)
  
        // Mth element after k right
        // rotations is (N-K)+(M-1) th
        // element of the array
        index = (N - K) + (M - 1);
  
    // Otherwise
    else
  
        // (M - K - 1) th element
        // of the array
        index = (M - K - 1);
  
    int result = a[index];
  
    // Return the result
    return result;
}
  
// Driver Code 
int main() 
    int a[] = { 1, 2, 3, 4, 5 }; 
    
    int N = sizeof(a) / sizeof(a[0]); 
    
    int K = 3, M = 2; 
    
    cout << getFirstElement(a, N, K, M); 
    
    return 0; 

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to implement
// the above approach
class GFG{
   
// Function to return Mth element of
// array after k right rotations
static int getFirstElement(int a[], int N,
                           int K, int M)
{
    // The array comes to original state
    // after N rotations
    K %= N;
    int index;
   
    // If K is greater or equal to M
    if (K >= M)
   
        // Mth element after k right
        // rotations is (N-K)+(M-1) th
        // element of the array
        index = (N - K) + (M - 1);
   
    // Otherwise
    else
   
        // (M - K - 1) th element
        // of the array
        index = (M - K - 1);
   
    int result = a[index];
   
    // Return the result
    return result;
}
   
// Driver Code 
public static void main(String[] args) 
    int a[] = { 1, 2, 3, 4, 5 }; 
     
    int N = 5
     
    int K = 3, M = 2
     
    System.out.println(getFirstElement(a, N, K, M)); 
}
  
// This code is contributed by Ritik Bansal

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to implement
# the above approach
  
# Function to return Mth element of
# array after k right rotations
def getFirstElement(a, N, K, M):
  
    # The array comes to original state
    # after N rotations
    K %= N
  
    # If K is greater or equal to M
    if (K >= M):
  
        # Mth element after k right
        # rotations is (N-K)+(M-1) th
        # element of the array
        index = (N - K) + (M - 1)
  
    # Otherwise
    else:
  
        # (M - K - 1) th element
        # of the array
        index = (M - K - 1)
  
    result = a[index]
  
    # Return the result
    return result
  
# Driver Code
if __name__ == "__main__":
      
    a = [ 1, 2, 3, 4, 5 ]
    N = len(a)
  
    K , M = 3, 2
  
    print( getFirstElement(a, N, K, M))
  
# This code is contributed by chitranayal

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to implement
// the above approach
using System;
class GFG{
  
// Function to return Mth element of
// array after k right rotations
static int getFirstElement(int []a, int N,
                        int K, int M)
{
    // The array comes to original state
    // after N rotations
    K %= N;
    int index;
  
    // If K is greater or equal to M
    if (K >= M)
  
        // Mth element after k right
        // rotations is (N-K)+(M-1) th
        // element of the array
        index = (N - K) + (M - 1);
  
    // Otherwise
    else
  
        // (M - K - 1) th element
        // of the array
        index = (M - K - 1);
  
    int result = a[index];
  
    // Return the result
    return result;
}
  
// Driver Code 
public static void Main() 
    int []a = { 1, 2, 3, 4, 5 }; 
      
    int N = 5; 
      
    int K = 3, M = 2; 
      
    Console.Write(getFirstElement(a, N, K, M)); 
}
  
// This code is contributed by Code_Mech

chevron_right


Output: 

4


 

Time complexity: O(1) 
Auxiliary Space: O(1)
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.