# Find the largest three elements in an array

Given an array with all distinct elements, find the largest three elements. Expected time complexity is O(n) and extra space is O(1).

Examples:

```Input: arr[] = {10, 4, 3, 50, 23, 90}
Output: 90, 50, 23
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Below is algorithm:

```1) Initialize the largest three elements as minus infinite.
first = second = third = -∞

2) Iterate through all elements of array.
a) Let current array element be x.
b) If (x > first)
{
// This order of assignment is important
third = second
second = first
first = x
}
c)  Else if (x > second)
{
third = second
second = x
}
d)  Else if (x > third)
{
third = x
}

3) Print first, second and third.
```

Below is the implementation of above algorithm.

## C

```#include <stdio.h>
#include <limits.h> /* For INT_MIN */

/* Function to print three largest elements */
void print2largest(int arr[], int arr_size)
{
int i, first, second, third;

/* There should be atleast two elements */
if (arr_size < 3)
{
printf(" Invalid Input ");
return;
}

third = first = second = INT_MIN;
for (i = 0; i < arr_size ; i ++)
{
/* If current element is smaller than first*/
if (arr[i] > first)
{
third = second;
second = first;
first = arr[i];
}

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

else if (arr[i] > third)
third = arr[i];
}

printf("Three largest elements are %d %d %d\n", first, second, third);
}

/* Driver program to test above function */
int main()
{
int arr[] = {12, 13, 1, 10, 34, 1};
int n = sizeof(arr)/sizeof(arr[0]);
print2largest(arr, n);
return 0;
}
```

## Java

```// Java code to find largest three elements
// in an array

class PrintLargest
{
/* Function to print three largest elements */
static void print2largest(int arr[], int arr_size)
{
int i, first, second, third;

/* There should be atleast two elements */
if (arr_size < 3)
{
System.out.print(" Invalid Input ");
return;
}

third = first = second = Integer.MIN_VALUE;
for (i = 0; i < arr_size ; i ++)
{
/* If current element is smaller than
first*/
if (arr[i] > first)
{
third = second;
second = first;
first = arr[i];
}

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

else if (arr[i] > third)
third = arr[i];
}

System.out.println("Three largest elements are " +
first + " " + second + " " + third);
}

/* Driver program to test above function*/
public static void main (String[] args)
{
int arr[] = {12, 13, 1, 10, 34, 1};
int n = arr.length;
print2largest(arr, n);
}
}
/*This code is contributed by Prakriti Gupta*/
```

Output:
`Three largest elements are 34 13 12`

# GATE CS Corner    Company Wise Coding Practice

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