Open In App

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

 `// C++ implementation of the approach``#include ``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;``}`

## Java

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

## Python3

 `# 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`

## C#

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

## Javascript

 ``

Output:

`6 6 5 6 6`

Time Complexity: O(n)

Auxiliary Space: O(n)