Second Largest Element in an Array

Medium Arrays
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;
}