Second Largest Element in an Array
Find the second largest distinct value in an array in a single pass.
Sample input
[10, 5, 20, 8]
Sample output
10
Solution
arr = [10, 5, 20, 8]
largest = second = float("-inf")
for x in arr:
if x > largest:
second = largest
largest = x
elif x > second and x != largest:
second = x
print(second)
const arr = [10, 5, 20, 8];
let largest = -Infinity, second = -Infinity;
for (const x of arr) {
if (x > largest) {
second = largest;
largest = x;
} else if (x > second && x !== largest) {
second = x;
}
}
console.log(second);
public class Main {
public static void main(String[] args) {
int[] arr = {10, 5, 20, 8};
int largest = Integer.MIN_VALUE, second = Integer.MIN_VALUE;
for (int x : arr) {
if (x > largest) {
second = largest;
largest = x;
} else if (x > second && x != largest) {
second = x;
}
}
System.out.println(second);
}
}
fun main() {
val arr = intArrayOf(10, 5, 20, 8)
var largest = Int.MIN_VALUE
var second = Int.MIN_VALUE
for (x in arr) {
if (x > largest) {
second = largest
largest = x
} else if (x > second && x != largest) {
second = x
}
}
println(second)
}
let arr = [10, 5, 20, 8]
var largest = Int.min, second = Int.min
for x in arr {
if x > largest {
second = largest
largest = x
} else if x > second && x != largest {
second = x
}
}
print(second)
void main() {
List<int> arr = [10, 5, 20, 8];
int largest = -9223372036854775808;
int second = -9223372036854775808;
for (var x in arr) {
if (x > largest) {
second = largest;
largest = x;
} else if (x > second && x != largest) {
second = x;
}
}
print(second);
}
#include <iostream>
#include <climits>
using namespace std;
int main() {
int arr[] = {10, 5, 20, 8};
int n = 4;
int largest = INT_MIN, second = INT_MIN;
for (int i = 0; i < n; i++) {
int x = arr[i];
if (x > largest) {
second = largest;
largest = x;
} else if (x > second && x != largest) {
second = x;
}
}
cout << second << endl;
return 0;
}
#include <stdio.h>
#include <limits.h>
int main() {
int arr[] = {10, 5, 20, 8};
int n = 4;
int largest = INT_MIN, second = INT_MIN;
for (int i = 0; i < n; i++) {
int x = arr[i];
if (x > largest) {
second = largest;
largest = x;
} else if (x > second && x != largest) {
second = x;
}
}
printf("%d\n", second);
return 0;
}