¿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
.