Skip to content
Related Articles

Related Articles

Mth element after K Right Rotations of an Array
  • Difficulty Level : Easy
  • Last Updated : 07 Aug, 2020

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++




// 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; 

Java




// 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

Python3




# 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

C#




// 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
Output: 
4


 

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

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up
Recommended Articles
Page :