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