🥇 Prácticas, Imprimir máximos de una lista

Un máximo es un valor el cual esta precedido por un valor menor, y sucedido también por un valor menor o por ningún valor.

Para poder verificar un valor tenemos 3 tipos de posibles valores dentro de una lista.

  • El elemento inicial.
  • Un valor intermedio en la lista.
  • El valor final.

Para solucionar el problema recorremos nuestra lista y verificamos en cada uno de los elementos que le preceden y suceden.

En pseudocódigo.

def obtener_maximos(A):

    for i = 0 to len(A)

        if i == 0
            if A[i] > A[i+1]
                print concat(i, " ", A[i])

        else if i == len(A) - 1
            if A[i] > A[i-1]
                print concat(i, " ", A[i])

        else
            if A[i] > A[i-1] && A[i] < A[i+1]
                print concat(i, " ", A[i])

Ahora implementamos el pseudocódigo en Go.

package main

import "fmt"

func main() {

	nums := []int{1, 2, 4, 1, 4, 2, 4, 3, 7, 5, 8, 5, 3, 0, 4, 1, 0, 3}

	for i := 0; i <= len(nums)-1; i++ {

		fmt.Printf("%d: ", i)

		switch {

		case i == 0:

			if nums[i] > nums[i+1] {
				fmt.Printf("%d Maximo \n", nums[i])
			} else {
				fmt.Printf("%d \n", nums[i])
			}

		case i == len(nums)-1:

			if nums[i] > nums[i-1] {
				fmt.Printf("%d Maximo \n", nums[i])
			} else {
				fmt.Printf("%d \n", nums[i])
			}

		default:

			if nums[i] > nums[i-1] && nums[i] > nums[i+1] {
				fmt.Printf("%d Maximo \n", nums[i])
			} else {
				fmt.Printf("%d \n", nums[i])
			}

		}

	}

}

La salida del programa es.

0: 1
1: 2
2: 4 Maximo
3: 1
4: 4 Maximo
5: 2
6: 4 Maximo
7: 3
8: 7 Maximo
9: 5
10: 8 Maximo
11: 5
12: 3
13: 0
14: 4 Maximo
15: 1
16: 0
17: 3 Maximo