# Find all elements in array which have at-least two greater elements

Given an array of n distinct elements, the task is to find all elements in array which have at-least two greater elements than themselves.

Examples:

```Input : arr[] = {2, 8, 7, 1, 5};
Output : 2  1  5
The output three elements have two or
more greater elements

Input  : arr[] = {7, -2, 3, 4, 9, -1};
Output : -2  3  4 -1
```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

Method 1 (Simple)
The naive approach is to run two loops and check one by one element of array check that array elements have at-least two elements greater than itself or not. If its true then print array element.

```// Simple C++ program to find all elements in array
// which have at-least two greater elements itself.
#include<bits/stdc++.h>
using namespace std;

void findElements(int arr[], int n)
{
// Pick elements one by one and count greater
// elements. If count is more than 2, print
// that element.
for (int i=0; i<n; i++)
{
int count = 0;
for (int j=0; j<n; j++)
if (arr[j] > arr[i])
count++;

if (count >= 2)
cout << arr[i] << " ";
}
}

// Driver code
int main()
{
int arr[] = { 2, -6 ,3 , 5, 1};
int n = sizeof(arr) / sizeof(arr[0]);
findElements(arr, n);
return 0;
}
```

Output:

```2  -6  1
```

Time Complexity : O(n2)

Method 2 (Use Sorting)
We sort the array first in increasing order, then we print first n-2 elements where n is size of array.

```// Sorting based C++ program to find all elements
// in array which have atleast two greater elements
// itself.
#include<bits/stdc++.h>
using namespace std;

void findElements(int arr[], int n)
{
sort(arr, arr+n);

for (int i=0; i<n-2; i++)
cout << arr[i] << " ";
}

//driven source
int main()
{
int arr[] = { 2, -6 ,3 , 5, 1};
int n = sizeof(arr) / sizeof(arr[0]);
findElements(arr, n);
return 0;
}
```

Output :

`-6 1 2`

Time Complexity : O(n Log n)

Method 3 (Efficient)
In second method we simply calculate second maximum element of array and print all element which is less than or equal to second maximum.

```// C++ program to find all elements in array which have
// atleast two greater elements itself.
#include<bits/stdc++.h>
using namespace std;

void findElements(int arr[], int n)
{
int first = INT_MIN, second = INT_MIN;
for (int i=0; i<n; i++)
{
/* If current element is smaller than first
then update both first and second */
if (arr[i] > first)
{
second = first;
first = arr[i];
}

/* If arr[i] is in between first and second
then update second  */
else if (arr[i] > second)
second = arr[i];
}

for (int i=0; i<n; i++)
if (arr[i] < second)
cout << arr[i] << " ";
}

// Driver code
int main()
{
int arr[] = { 2, -6, 3, 5, 1};
int n = sizeof(arr) / sizeof(arr[0]);
findElements(arr, n);
return 0;
}
```

Output:

```2  -6  1
```

Time Complexity : O(n)

This article is contributed by DANISH_RAZA . 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.

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
1.8 Average Difficulty : 1.8/5.0
Based on 22 vote(s)