🥇 Practicas, Encontrar segundo valor máximo de una lista

🍿 ¿Cómo encontrar el segundo valor máximo de una lista?

Para encontrar el segundo valor máximo de una lista utilizamos el siguiente algoritmo.

def segundo_valor_maximo(A):
    primero = 0
    segundo = 0

    if A[0] > A[1]
        primero, segundo = A[0], A[1]
    else
        primero, segundo = A[1], A[0]

    for i = 2 to len(A)
        if A[i] > primero
            primero, segundo = A[i], primero
        else if A[i] > segundo
            segundo = A[i]

    return segundo

Ahora implementamos el pseudocódigo en Go.

package main

import "fmt"

// creamos un tipo personalizado para la lista
type Nums []int

// agregamos una funcion para calcular el máximo
func (nums Nums) SegundoMaximo() int {

	// creamos variables contenedoras para el
	// primero y segundo maximos
	var primero, segundo int

	// ordenamos primero y segundo segun su maximo
	if nums[0] > nums[1] {
		primero, segundo = nums[0], nums[1]
	} else {
		primero, segundo = nums[1], nums[0]
	}

	// recorremos de i = 2 hasta len(nums)
	for i := 2; i < len(nums); i++ {

		// si el item iterado es mayor que primero
		// recorremos los valores de primero y segundo
		// si solo es mayor que segundo
		// solo actualizamos segundo
		if nums[i] > primero {
			primero, segundo = nums[i], primero
		} else if nums[i] > segundo {
			segundo = nums[i]
		}
	}

	// retornamos segundo
	return segundo

}

func main() {

	nums := Nums{81, 18, 23, 57, 46, 26, 63, 35, 6, 49}

	fmt.Println("El segundo numero mayor es:", nums.SegundoMaximo())

}

Salida.

El segundo numero mayor es: 63

La clave para entender este algoritmo es entender que podemos realizar un desplazamiento secuencial utilizando la sintaxis de asignación múltiple primero, segundo = A[i], primero.