Sugerencia n. ° 1: si organiza los números en pares, ordenar cada par cuesta n / 2 comparaciones.
Sugerencia n. ° 2: si recibe un par de números (x, y) de modo que x <= y, solo necesita verificar x para el mínimo e y para el máximo.
Avíseme si aún no puede encontrar la solución, y agregaré más pistas.
- ¿Cómo se programan las computadoras para resolver problemas matemáticos?
- ¿Cuál es el alcance de la probabilidad y las matemáticas discretas en ciencias de la computación?
- ¿Todos los espacios nulos son subespacios? y todos los subespacios tienen un espacio nulo?
- ¿Cómo es ser un experto en matemáticas trabajando como ingeniero de software?
- Cómo pasar por las clases de GE
Aquí hay una función basada en esta idea, en Haskell:
minMax :: (Ord t) => [t] -> Quizás (t, t)
minMax list = lista de casos de
(x: rest) -> Solo $ minMax0 (x, x) rest
[] -> Nada
minMax0 :: (Ord t) => (t, t) -> [t] -> (t, t)
minMax0 (acc_min, acc_max) list = lista de casos de
(a: b: descanso) ->
let (x, y) = si a <= b entonces (a, b) más (b, a)
en minMax0 (min x acc_min, max y acc_max) resto
[x] -> (min x acc_min, max x acc_max)
[] -> (acc_min, acc_max)
Pitón:
def min_max (números):
si len (números) <1:
regresar Ninguno
acc_min = números [0]
acc_max = números [0]
i = 1
mientras yo <len (números):
a = números [i]
b = números [i + 1] si i + 1 <len (números) más a
(x, y) = (a, b) si a <= b más (b, a)
acc_min = min (x, acc_min)
acc_max = max (y, acc_max)
i + = 2
volver acc_min, acc_max
Nemerle (sugerido por Matt Eri):
def minmax (l: lista [int]) {
actualización de def (a, b, prevmin, prevmax) {(Min (a, prevmin), Max (b, prevmax))}
partido (l) {
El | x :: y :: cola => def (min, max) = minmax (cola);
if (x <y) actualizar (x, y, min, max) más actualizar (y, x, min, max)
El | [x] => (x, x)
El | [] => (int.MaxValue, int.MinValue)
}
}