In this tutorial, we are going to write the java program to find the Second Largest Number In Array, so this is an important problem and it’s generally asked in interviews.
There are various ways available to find out the second largest number in array java. we are going to each of them with an examples
- Using Sorting technique
- Using Two Traverse of array
Post Type: | Java Programs Examples |
Published On: | www.softwaretestingo.com |
Applicable For: | Freshers & Experience |
Get Updates: | Join Our Telegram Group |
Find Second Largest Number In Array Using the Sorting Technique
The goal is to sort the array in descending order and then return the second element that is not equal to the largest element from the sorted array.
package com.softwaretestingo.interviewprograms; import java.util.Arrays; public class SecondLargestNoEx1 { static void FindSecondlargest(int arr[], int arr_size) { int i, first, second; // When array having less then 2 elements if (arr_size < 2) { System.out.printf(" Invalid Input "); return; } // Sort the array Arrays.sort(arr); // Start from second last element as the largest element is at last for (i = arr_size - 2; i >= 0; i--) { // If the element is not equal to largest element if (arr[i] != arr[arr_size - 1]) { System.out.printf("The second largest " + "element is %d\n", arr[i]); return; } } System.out.printf("There is no second " + "largest element\n"); } public static void main(String[] args) { int arr[] = {12, 35, 1, 10, 34, 1}; int n = arr.length; FindSecondlargest(arr, n); } }
Another Way to Find the Second Largest Number In Array using the sorting technique.
package com.softwaretestingo.interviewprograms; import java.util.Arrays; public class SecondLargestNoEx2 { public static void main(String[] args) { int array[] = {10, 20, 25, 63, 96, 57}; int size = array.length; Arrays.sort(array); System.out.println("sorted Array ::"+Arrays.toString(array)); int res = array[size-2]; System.out.println("2nd largest element is ::"+res); } }
Find Second Largest Number In Array Using Two Traverse of array
package com.softwaretestingo.interviewprograms; public class SecondLargestNoEx3 { public static int getSecondLargest(int[] a) { int temp; //sort the array for (int i = 0; i < a.length; i++) { for (int j = i + 1; j < a.length; j++) { if (a[i] > a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } //return second largest element return a[a.length - 2]; } public static void main(String[] args) { int a[] = { 11,10,4, 15, 16, 13, 2 }; System.out.println("Second Largest: " +getSecondLargest(a)); } }
Another Method
package com.softwaretestingo.interviewprograms; public class SecondLargestNoEx3 { static void secondLargest(int arr[], int arr_size) { int i, first, second; if (arr_size < 2) { System.out.printf(" Invalid Input "); return; } int largest = second = Integer.MIN_VALUE; // Find the largest element for(i = 0; i < arr_size; i++) { largest = Math.max(largest, arr[i]); } // Find the second largest element for(i = 0; i < arr_size; i++) { if (arr[i] != largest) second = Math.max(second, arr[i]); } if (second == Integer.MIN_VALUE) System.out.printf("There is no second " + "largest element\n"); else System.out.printf("The second largest " + "element is %d\n", second); } public static void main(String[] args) { int arr[] = { 12, 35, 1, 10, 34, 1 }; int n = arr.length; secondLargest(arr, n); } }
Second Largest Number In Array Java
So when someone asks about any Java programs in interviews, first of all, we need to analyze the coding assignment and break it down. Now for this particular assignment, there are a couple of things that we need to take into account. so in order to find the Second Largest Number In Array we know one thing we must go through every element within the Array.
- We must iterate through the entire list another thing is that we need to be able to keep track of the second highest number.
- We also need to be able to keep track of the highest number now the reason we need to be able to keep track of these numbers is basically to make sure that we are going to calculate the proper values upon each iteration of this loop.
- We need to know how to store the value of the above numbers as we iterate through this list so basically what this means is we need to be able to set up conditional statements that are going to check for the highest and the second highest values.
Approach
First, take the number of elements that the user wants to enter in the array as input. Then, initialize an array with that size and take input from users. After taking input from the user, we will use the below approach to find out the second-highest number in an array.
- We’ll be initializing two integers – largest and second-largest. Both integers will be set to the possible minimum integer value (i.e., Integer.MIN_VALUE).
- This is the optional step where we are print all the elements of the array.
- The main logic to find out the second-highest or second maximum number in the array is very simple. Whenever the current element of the array is greater than the value present in integer largest then set the largest value to the second-largest and current element to the largest. If the current element is less than the largest but greater than the second-largest then we will assign the current element to the second-largest. And we will repeat this process until we reached the last element of the array.
If you have traverse the complete array list then we will able to find the Second Largest Number In Array. Here is the example program:
package com.softwaretestingo.interviewprograms; import java.util.Arrays; import java.util.Scanner; public class SecondLargestNoEx4 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Enter array size :"); Integer numberOfElements = scanner.nextInt(); int arr[] = new int[numberOfElements]; System.out.println("Enter array elements :"); for (int i = 0; i < arr.length; i++) { arr[i] = scanner.nextInt(); } System.out.println("Array elements are" + Arrays.toString(arr)); int largest = Integer.MIN_VALUE; int secondLargest = Integer.MIN_VALUE; for (int i = 0; i < arr.length; i++) { if (arr[i] > largest) { secondLargest = largest; largest = arr[i]; } else if (arr[i] > secondLargest && arr[i] != largest) { secondLargest = arr[i]; } } if (secondLargest == Integer.MIN_VALUE) { System.out.println("There is no second highest/largest element in the array"); } else { System.out.println("Second highest element in array is :" + secondLargest); } scanner.close(); } }
Second Lowest Number In Array Java [ Using Loops ]
As we are discussing about how to find the second largest element in the array, sometime in interviews it was also asked to find out the second Highest and Second lowest elements of the array.
- Declare two variables say first = INT_MAX and second = INT_MAX to hold the first and second smallest elements respectively.
- Now, iterate over the entire array i.e, from index 0 to n-1
- Inside the loop check if (arr[i]<first) then set second = first and first = arr[i].
- Else check if(second > arr[i]) then set second = arr[i]
- After complete iteration print the value of second.
package com.softwaretestingo.interviewprograms; public class SecondLowestNoEx1 { static int secSmallest(int arr[], int n) { int first = Integer.MAX_VALUE, second = Integer.MAX_VALUE; for (int i=0; i < n; i++) { if(arr[i] < first) { second = first; first = arr[i]; } else if(second>arr[i]) second = arr[i]; } return second; } public static void main(String[] args) { int arr[] = {12, 13, 1, 10, 34, 10}; int n = arr.length; System.out.print("Second Lowest Number: " +secSmallest(arr, n)); } }
Second Lowest Number In Array Java [ Using Two Loops ]
We can also find out the second lowest number by using two loops.
- Take a variable say smallest = Integer.MAX_VALUE
- Run a loop over the entire array and check if (arr[i]<smallest)
- Then set smallest = arr[i].
- Declare another variable say sec_smallest = Integer.MAX_VALUE
- Run a loop and check if arr[i] != smallest and arr[i] < sec_smallest
- Then print(sec_smallest) after completing the iteration.
package com.softwaretestingo.interviewprograms; public class SecondLowestNoEx2 { static int secLowest(int arr[], int n) { // assigning first element as smallest temporarily int smallest = arr[0]; // we find the smallest element here for (int i=0; i < n; i++){ if(arr[i] < smallest) smallest = arr[i]; } // temporarily assinging largest max value int sec_smallest = Integer.MAX_VALUE; // finding second smallest here for (int i=0; i < n; i++){ if(arr[i] != smallest && arr[i] < sec_smallest) sec_smallest = arr[i]; } return sec_smallest; } public static void main(String[] args) { int arr[] = {12, 13, 1, 10, 34, 10}; int n = arr.length; System.out.print("Second Lowest Number: " +secLowest(arr, n)); } }
Find Second Smallest and Second Largest Element in an array
We can find the Second Smallest and Second Largest elements by using 3 methods:
Solution 1: Brute Force Approach
You can use this approach when there is not duplicates. So for this approach you have to follow the below steps:
- Sort the array in ascending order
- The element present at the second index is the second smallest element
- The element present at the second index from the end is the second largest element
package com.softwaretestingo.interviewprograms; import java.util.Arrays; public class SecondSmallestSecondLargestEx1 { static private void getElements(int[] arr, int n) { if (n == 0 || n==1) { System.out.print(-1); System.out.print(" "); System.out.print(-1); System.out.print("\n"); } Arrays.sort(arr); int small = arr[1]; int large = arr[n - 2]; System.out.println("Second smallest is "+small); System.out.println("Second largest is "+large); } public static void main(String[] args) { int[] arr = {1, 2, 4, 6, 7, 5}; int n = arr.length; getElements(arr, n); } }
Solution 2:
We definitely want to avoid sorting the whole array if we can help it – doing so would increase our time complexity. Is there some way we can get our answer without having to sort everything?
- Find the smallest and largest element in the array in a single traversal
- After this, we once again traverse the array and find an element that is just greater than the smallest element we just found.
- Similarly, we would find the largest element which is just smaller than the largest element we just found
- Indeed, this is our second smallest and second largest element.
package com.softwaretestingo.interviewprograms; public class SecondSmallestSecondLargestEx2 { static private void getElements(int[] arr, int n) { if (n == 0 || n==1) { System.out.print(-1); System.out.print(" "); System.out.print(-1); System.out.print("\n"); } int small = Integer.MAX_VALUE; int second_small = Integer.MAX_VALUE; int large = Integer.MIN_VALUE; int second_large = Integer.MIN_VALUE; int i; for (i = 0;i < n;i++) { small = Math.min(small,arr[i]); large = Math.max(large,arr[i]); } for (i = 0;i < n;i++) { if (arr[i] < second_small && arr[i] != small) { second_small = arr[i]; } if (arr[i] > second_large && arr[i] != large) { second_large = arr[i]; } } System.out.println("Second smallest is "+second_small); System.out.println("Second largest is "+second_large); } public static void main(String[] args) { int[] arr = {11, 22, 54, 96, 37, 55}; int n = arr.length; getElements(arr, n); } }
Solution 3:
In our previous solution, we were able to bring the time complexity down to O(N) by doing two traversals. But there is another more efficient way, which requiring only a single traversal to find the answer. By using smart comparisons, we can eliminate the need for a second traversal.
Second Smallest Algo:
- If the current element is smaller than ‘small’, then we update second_small and small variables
- Else if the current element is smaller than ‘second_small’ then we update the variable ‘second_small’
- Once we traverse the entire array, we would find the second smallest element in the variable second_small.
- Here’s a quick demonstration of the same.
Second Largest Algo:
- If the current element is larger than ‘large’ then update second_large and large variables
- Else if the current element is larger than ‘second_large’ then we update the variable second_large.
- Once we traverse the entire array, we would find the second largest element in the variable second_large.
- Here’s a quick demonstration of the same.
package com.softwaretestingo.interviewprograms; public class SecondSmallestSecondLargestEx3 { static private int secondSmallest(int[] arr, int n) { if (n < 2) { return -1; } int small = Integer.MAX_VALUE; int second_small = Integer.MAX_VALUE; int i; for (i = 0; i < n; i++) { if (arr[i] < small) { second_small = small; small = arr[i]; } else if (arr[i] < second_small && arr[i] != small) { second_small = arr[i]; } } return second_small; } static private int secondLargest(int[] arr, int n) { if(n<2) return -1; int large = Integer.MIN_VALUE; int second_large = Integer.MIN_VALUE; int i; for (i = 0; i < n; i++) { if (arr[i] > large) { second_large = large; large = arr[i]; } else if (arr[i] > second_large && arr[i] != large) { second_large = arr[i]; } } return second_large; } public static void main(String[] args) { int[] arr = {18, 22, 46, 77, 77, 53}; int n = arr.length; int sS = secondSmallest(arr, n); int sL = secondLargest(arr, n); System.out.println("Second smallest is "+sS); System.out.println("Second largest is "+sL); } }
Get Second Highest/Lowest Number using Streams
package com.softwaretestingo.interviewprograms; import java.util.Arrays; import java.util.Collections; import java.util.List; public class SecondSmallestSecondLargestEx4 { public static void main(String[] args) { List<Integer> list=Arrays.asList(11,6,2,978,78,45,87,23,9,11,76,56); //Print Second Highest int sechH=list.stream().sorted(Collections.reverseOrder()).distinct().limit(2).skip(1).findFirst().get(); System.out.println("Second Highest Number: "+sechH); int sechHH=list.stream().sorted(Collections.reverseOrder()).distinct().skip(1).findFirst().get(); System.out.println("Second Highest Number: "+sechHH); //Print Second Lowest int secL=list.stream().sorted().distinct().skip(1).findFirst().get(); System.out.println("Second lowest Number: "+secL); } }
Conclusion:
We belive in this blog post we tryied to cover all the possisble ways to find the second largest and second smallest element from the array list. We hope this Java Programs Examples will be informative and helpful.
If you found this tutorial helpful, be sure to share it with others who might find it informative. And don’t forget to leave your thoughts in the comment section below! If you’re on the hunt for more interview programs, visit our interview category.
Leave a Reply