Replace every element with the greatest element on right side - GeeksforGeeks

17 Jan, 2022
Given an array of integers, replace every element with the next greatest element (greatest element on the right side) in the array. Since there is no element next to the last element, replace it with -1. For example, if the array is {16, 17, 4, 3, 5, 2}, then it should be modified to {17, 5, 5, 5, 2, -1}.  
The question is very similar to this post and solutions are also similar. A naive method is to run two loops. The outer loop will one by one pick array elements from left to right. The inner loop will find the greatest element present after the picked element. Finally the outer loop will replace the picked element with the greatest element found by inner loop. The time complexity of this method will be O(n*n). A tricky method is to replace all elements using one traversal of the array. The idea is to start from the rightmost element, move to the left side one by one, and keep track of the maximum element. Replace every element with the maximum element.  
C++
C
Java
Python3
C#
PHP
Javascript
// C++ Program to replace every element with the greatest// element on right side#include <bits/stdc++.h>using namespace std; /* Function to replace every element with thenext greatest element */void nextGreatest(int arr[], int size){    //Initialise maxFromRight with -1    int maxFromRight = -1;    int n = arr.length;      // run loop from last and replace maxFromRight with the element in the array    for(int i= n-1; i>=0;i--) {      int temp = maxFromRight;      if(arr[i]> maxFromRight){        //replacing only array element with maxFromRight in case element is bigger        maxFromRight = arr[i];      }      arr[i] = temp;    }    return arr;} /* A utility Function that prints an array */void printArray(int arr[], int size){    int i;    for (i = 0; i < size; i++)        cout << arr[i] << " ";    cout << endl;} /* Driver program to test above function */int main(){    int arr[] = {16, 17, 4, 3, 5, 2};    int size = sizeof(arr)/sizeof(arr[0]);    nextGreatest (arr, size);    cout << "The modified array is: \n";    printArray (arr, size);    return (0);} // This is code is contributed by rathbhupendra
// C Program to replace every element with the greatest// element on right side#include <stdio.h> /* Function to replace every element with the   next greatest element */void nextGreatest(int arr[], int size){  // Initialize the next greatest element  int max_from_right =  arr[size-1];   // The next greatest element for the rightmost element  // is always -1  arr[size-1] = -1;   // Replace all other elements with the next greatest  for(int i = size-2; i >= 0; i--)  {    // Store the current element (needed later for updating    // the next greatest element)    int temp = arr[i];     // Replace current element with the next greatest    arr[i] = max_from_right;     // Update the greatest element, if needed    if(max_from_right < temp)       max_from_right = temp;  }} /* A utility Function that prints an array */void printArray(int arr[], int size){  int i;  for (i=0; i < size; i++)    printf("%d ", arr[i]);  printf("\n");} /* Driver program to test above function */int main(){  int arr[] = {16, 17, 4, 3, 5, 2};  int size = sizeof(arr)/sizeof(arr[0]);  nextGreatest (arr, size);  printf ("The modified array is: \n");  printArray (arr, size);  return (0);}
// Java Program to replace every element with the// greatest element on right sideimport java.io.*; class NextGreatest{    /* Function to replace every element with the       next greatest element */    static void nextGreatest(int arr[])    {        int size = arr.length;         // Initialize the next greatest element        int max_from_right =  arr[size-1];         // The next greatest element for the rightmost        // element is always -1        arr[size-1] = -1;         // Replace all other elements with the next greatest        for (int i = size-2; i >= 0; i--)        {            // Store the current element (needed later for            // updating the next greatest element)            int temp = arr[i];             // Replace current element with the next greatest            arr[i] = max_from_right;             // Update the greatest element, if needed            if(max_from_right < temp)            max_from_right = temp;        }    }     /* A utility Function that prints an array */    static void printArray(int arr[])    {        for (int i=0; i < arr.length; i++)        System.out.print(arr[i]+" ");    }     public static void main (String[] args)    {        int arr[] = {16, 17, 4, 3, 5, 2};        nextGreatest (arr);        System.out.println("The modified array:");        printArray (arr);    }}/*This code is contributed by Devesh Agrawal*/
# Python Program to replace every element with the# greatest element on right side # Function to replace every element with the next greatest# elementdef nextGreatest(arr):     size = len(arr)     # Initialize the next greatest element    max_from_right = arr[size-1]     # The next greatest element for the rightmost element    # is always -1    arr[size-1] = -1     # Replace all other elements with the next greatest    for i in range(size-2,-1,-1):         # Store the current element (needed later for updating        # the next greatest element)        temp = arr[i]         # Replace current element with the next greatest        arr[i]=max_from_right         # Update the greatest element, if needed        if max_from_right< temp:            max_from_right=temp # Utility function to print an arraydef printArray(arr):    for i in range(0,len(arr)):        print (arr[i],end=" ") # Driver function to test above functionarr = [16, 17, 4, 3, 5, 2]nextGreatest(arr)print ("Modified array is")printArray(arr)# This code is contributed by Devesh Agrawal
// C# Program to replace every element with the// greatest element on right sideusing System; class GFG {         /* Function to replace every element with    the    next greatest element */    static void nextGreatest(int []arr)    {        int size = arr.Length;         // Initialize the next greatest element        int max_from_right = arr[size-1];         // The next greatest element for the        // rightmost element is always -1        arr[size-1] = -1;         // Replace all other elements with the        // next greatest        for (int i = size-2; i >= 0; i--)        {            // Store the current element (needed            // later for updating the next            // greatest element)            int temp = arr[i];             // Replace current element with            // the next greatest            arr[i] = max_from_right;             // Update the greatest element, if            // needed            if(max_from_right < temp)            max_from_right = temp;        }    }     /* A utility Function that prints an array */    static void printArray(int []arr)    {        for (int i=0; i < arr.Length; i++)        Console.Write(arr[i]+" ");    }     public static void Main ()    {        int []arr = {16, 17, 4, 3, 5, 2};        nextGreatest (arr);        Console.WriteLine("The modified array:");        printArray (arr);    }} /* This code is contributed by vt_m.*/
<?php// PHP Program to replace every element with// the greatest element on right side /* Function to replace every elementwith the next greatest element */function nextGreatest(&$arr, $size){    // Initialize the next greatest element    $max_from_right = $arr[$size - 1];         // The next greatest element for the    // rightmost element is always -1    $arr[$size - 1] = -1;         // Replace all other elements with    // the next greatest    for($i = $size - 2; $i >= 0; $i--)    {        // Store the current element (needed        // later for updating the next        // greatest element)        $temp = $arr[$i];             // Replace current element with the        // next greatest        $arr[$i] = $max_from_right;             // Update the greatest element,        // if needed        if($max_from_right < $temp)        $max_from_right = $temp;    }} // A utility Function that prints an arrayfunction printArray($arr, $size){    for ($i = 0; $i < $size; $i++)        echo $arr[$i] . " ";    echo "\n";} // Driver Code$arr = array(16, 17, 4, 3, 5, 2);$size = count($arr);nextGreatest ($arr, $size);echo "The modified array is: \n";printArray ($arr, $size); // This code is contributed by// rathbhupendra?>
<script> // JavaScript Program to replace every element with the greatest// element on right side /* Function to replace every element with thenext greatest element */   function nextGreatest(arr,size){           // Initialize the next greatest element       max_from_right = arr[size-1];           // The next greatest element for the rightmost element    // is always -1    arr[size-1] = -1;           // Replace all other elements with the next greatest    for(let  i = size-2; i >= 0; i--)    {        // Store the current element (needed later for updating        // the next greatest element)         temp = arr[i];               // Replace current element with the next greatest        arr[i] = max_from_right;               // Update the greatest element, if needed        if(max_from_right < temp)        max_from_right = temp;    }}   /* A utility Function that prints an array */      function  printArray(arr,size){     var i;    for ( let i = 0; i < size; i++)      document.write(arr[i]  + " " );}   /* Driver program to test above function */      arr = new Array (16, 17, 4, 3, 5, 2);      size = arr.length;    nextGreatest (arr, size);      document.write ("The modified array is: " + "<br>"+ " \n");           printArray (arr, size);         // This code is contributed by simranarora5sos      </script>
Output: 
The modified array is:
17 5 5 5 2 -1
Time Complexity: O(n) where n is the number of elements in array. 
YouTubeGeeksforGeeks507K subscribersReplace every element with the greatest element on right side | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 7:19•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=bLb8e83OK7o" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
Please write comments if you find any of the above codes/algorithms incorrect, or find other ways to solve the same problem. 
rathbhupendra
simranarora5sos
rajeevkri
sweetyty
amartyaghoshgfg
Amazon
Arrays
Amazon
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Stack Data Structure (Introduction and Program)
Introduction to Arrays
Multidimensional Arrays in Java
Linear Search
Linked List vs Array
Given an array A[] and a number x, check for pair in A[] with sum as x (aka Two Sum)
Python | Using 2D arrays/lists the right way
Search an element in a sorted and rotated array