Find the maximum element in the array other than Ai

Given an array arr[] of size N. The task is to find maximum element among N – 1 elements other than arr[i] for each i from 1 to N.

Examples:

Input: arr[] = {2, 5, 6, 1, 3}
Output: 6 6 5 6 6



Input: arr[] = {1, 2, 3}
Output: 3 3 2

Approach: An efficient approach is to make prefix and suffix array of maximum elements and find maximum element among N – 1 elements other than arr[i].

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to find maximum element
// among (N - 1) elements other than
// a[i] for each i from 1 to N
int max_element(int a[], int n)
{
    // To store prefix max element
    int pre[n];
  
    pre[0] = a[0];
    for (int i = 1; i < n; i++)
        pre[i] = max(pre[i - 1], a[i]);
  
    // To store suffix max element
    int suf[n];
  
    suf[n - 1] = a[n - 1];
    for (int i = n - 2; i >= 0; i--)
        suf[i] = max(suf[i + 1], a[i]);
  
    // Find the maximum element
    // in the array other than a[i]
    for (int i = 0; i < n; i++) {
        if (i == 0)
            cout << suf[i + 1] << " ";
  
        else if (i == n - 1)
            cout << pre[i - 1] << " ";
  
        else
            cout << max(pre[i - 1], suf[i + 1]) << " ";
    }
}
  
// Driver code
int main()
{
    int a[] = { 2, 5, 6, 1, 3 };
    int n = sizeof(a) / sizeof(a[0]);
  
    max_element(a, n);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach
class GFG 
{
  
// Function to find maximum element
// among (N - 1) elements other than
// a[i] for each i from 1 to N
static void max_element(int a[], int n)
{
    // To store prefix max element
    int []pre = new int[n];
  
    pre[0] = a[0];
    for (int i = 1; i < n; i++)
        pre[i] = Math.max(pre[i - 1], a[i]);
  
    // To store suffix max element
    int []suf = new int[n];
  
    suf[n - 1] = a[n - 1];
    for (int i = n - 2; i >= 0; i--)
        suf[i] = Math.max(suf[i + 1], a[i]);
  
    // Find the maximum element
    // in the array other than a[i]
    for (int i = 0; i < n; i++) 
    {
        if (i == 0)
            System.out.print(suf[i + 1] + " ");
  
        else if (i == n - 1)
            System.out.print(pre[i - 1] + " ");
  
        else
            System.out.print(Math.max(pre[i - 1],
                              suf[i + 1]) + " ");
    }
}
  
// Driver code
public static void main(String []args) 
{
    int a[] = { 2, 5, 6, 1, 3 };
    int n = a.length;
  
    max_element(a, n);
}
}
  
// This code is contributed by Rajput-Ji

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach 
  
# Function to find maximum element 
# among (N - 1) elements other than 
# a[i] for each i from 1 to N 
def max_element(a, n) :
  
    # To store prefix max element 
    pre = [0] * n; 
  
    pre[0] = a[0]; 
    for i in range(1, n) : 
        pre[i] = max(pre[i - 1], a[i]); 
  
    # To store suffix max element 
    suf = [0] * n; 
  
    suf[n - 1] = a[n - 1]; 
    for i in range(n - 2, -1, -1) :
        suf[i] = max(suf[i + 1], a[i]); 
  
    # Find the maximum element 
    # in the array other than a[i] 
    for i in range(n) :
        if (i == 0) :
            print(suf[i + 1], end = " "); 
  
        elif (i == n - 1) :
            print(pre[i - 1], end = " "); 
  
        else :
            print(max(pre[i - 1], 
                      suf[i + 1]), end = " ");
  
# Driver code 
if __name__ == "__main__"
  
    a = [ 2, 5, 6, 1, 3 ]; 
    n = len(a); 
  
    max_element(a, n); 
  
# This code is contributed by AnkitRai01

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach
using System; 
  
class GFG 
{
  
// Function to find maximum element
// among (N - 1) elements other than
// a[i] for each i from 1 to N
static void max_element(int []a, int n)
{
    // To store prefix max element
    int []pre = new int[n];
  
    pre[0] = a[0];
    for (int i = 1; i < n; i++)
        pre[i] = Math.Max(pre[i - 1], a[i]);
  
    // To store suffix max element
    int []suf = new int[n];
  
    suf[n - 1] = a[n - 1];
    for (int i = n - 2; i >= 0; i--)
        suf[i] = Math.Max(suf[i + 1], a[i]);
  
    // Find the maximum element
    // in the array other than a[i]
    for (int i = 0; i < n; i++) 
    {
        if (i == 0)
            Console.Write(suf[i + 1] + " ");
  
        else if (i == n - 1)
            Console.Write(pre[i - 1] + " ");
  
        else
            Console.Write(Math.Max(pre[i - 1],
                           suf[i + 1]) + " ");
    }
}
  
// Driver code
public static void Main(String []args) 
{
    int []a = { 2, 5, 6, 1, 3 };
    int n = a.Length;
  
    max_element(a, n);
}
}
  
// This code is contributed by PrinciRaj1992

chevron_right


Output:

6 6 5 6 6


My Personal Notes arrow_drop_up

pawanasipugmailcom

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.