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

1.8

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  

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.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.

Recommended Posts:



1.8 Average Difficulty : 1.8/5.0
Based on 22 vote(s)










Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.