Write a java program to find the second highest number in an array. Given an unsorted array, we have to write a java code to find the second highest number in an array.

For solving this problem time complexity is an important factor. Try to solve the problem in minimum time complexity. In this tutorial, we discuss different approaches and their time complexity.

For example – Let’s take an array.

**Input** – arr[] = { 1, 9, 5, 2, 8, -1, 3, 55}

**Output**: 9

The second largest element in this array is 9. Before solving this problem think for a moment how do you solve this problem. Which approach you prefer and why?

The easiest approach is to sort the array and find the second highest number. For sorting either we can write our own sort method using sorting algorithm or we can use java inbuilt sort method. The time complexity of sorting an array is O(nlogn).

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.util.Arrays; public class SecondHighest { public static void main(String[] args) { //unsorted array int num[] = {1, 9, 5, 2, 8, -1, 3, 55}; //Length of an array int n = num.length; //Sort the array Arrays.sort(num); /** * After sorting * Second highest number is at n-2 position */ System.out.println("Second Highest Number: "+num[n-2]); } } |

NOTE:If the element of an array is repeated then this approach won’t work.

To understand this let’s take an example.

int num[] = {1, 9, 5, 55, 8, -1, 3, 55};

So what will be the second highest number if we use above method (sort and pick the element at n-2). The element is 55 which is wrong.

**The best approach is to traverse an array to find the second maximum number**. Let’s implement this approach.

## Java Program to Find the Second Highest Number in an Array

In this approach, we traverse an array and maintain two indexes highest and secondHighest. The time complexity of this approach is O(n).

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | public class SecondHighest { public static void main(String[] args) { // unsorted array int num[] = { 1, 9, 5, 55, 8, -1, 3, 55 }; // Length of an array int n = num.length; // Initialize highest and second highest with minimum integer value int highest = Integer.MIN_VALUE; int secondHighest = Integer.MIN_VALUE; //Traverse an array for (int i = 0; i < n; i++) { // If greater than highest if (num[i] > highest) { // Assign highest value into secondhigest secondHighest = highest; // Set new highest highest = num[i]; } // If number is less than highest and greater than secondHighest if (num[i] < highest && num[i] > secondHighest) { // Set second highest secondHighest = num[i]; } } System.out.println("Second highest " + secondHighest); } } |

Java program to find the first non-repeated character in a string

Find pair of elements in an array whose sum is equal to a given number

I have discussed two approaches to solve this problem. If you know some other optimized way to solve this problem then you can discuss with us through your comments.