Проблема:
Проблема в том, чтобы получить второй по величине элемент массива.
Наблюдение:
Второе по величине число определяется как число, которое имеет минимальную разницу при вычитании из максимального элемента в массиве.
Решение:
Это двухпроходное решение. Первый проход - найти максимальное количество. Второй проход - найти элемент, который имеет минимальную разницу с максимальным элементом по сравнению с другими элементами массива. Пример: в массиве [2, 3, 6, 6, 5] максимум = 6 и второй максимум = 5, поскольку он имеет минимальную разницу с максимальным элементом 6 - 5 = 1, решение для второго по величине = 5
function printSecondMax(myArray) {
var x, max = myArray[0];
// Find maximum element
for(x in myArray){
if(max < myArray[x]){
max = myArray[x];
}
}
var secondMax = myArray[0], diff = max - secondMax;
// Find second max, an element that has min diff with the max
for(x in myArray){
if(diff != 0 && (max - myArray[x]) != 0 && diff > (max - myArray[x])){
secondMax = myArray[x];
diff = max - secondMax;
}
}
console.log(secondMax);
}
Сложность: O (n), это самый простой способ сделать это.
Чтобы найти максимальный элемент еще эффективнее, можно заглянуть в max heap , вызов max-heapify займет O (log n) времени, чтобы найти максимум, а затем всплывающий верхний элемент дает максимум. Чтобы получить второй максимум, max-heapify после всплывающего окна и продолжайте всплывать, пока не получите число, которое меньше максимального. Это будет второй максимум. Это решение имеет O (n log n) сложности.