¿El número con el valor absoluto más pequeño en una matriz de Python?
Título: Hay una matriz en orden ascendente. Puede haber números positivos, números negativos o 0 en la matriz. Encuentre el número con el valor absoluto más pequeño de los elementos de la matriz. Por ejemplo, en la matriz [-10, -5, -2, 7, 15, 50], el número con el valor absoluto más pequeño en la matriz es -2.
Análisis: Dicotomía. Esta pregunta se puede dividir en las siguientes tres situaciones:
(1) Si el primer elemento de la matriz es un número no negativo, entonces minNum = arr[0]
( 2) Si el último elemento de la matriz tiene un valor negativo, entonces minNum = arr[-1].
(3) Si hay números positivos y negativos en la matriz, primero encuentre el punto divisorio entre números positivos y negativos. Si el punto divisorio es exactamente 0, entonces 0 es el valor mínimo. De lo contrario, el número mínimo se determina comparando los valores absolutos de los números positivos y negativos alrededor del punto de corte.
¿Cómo encontrar el punto divisorio entre números positivos y negativos? Usando el método de dicotomía, la idea principal es: tomar el valor a[mid] en el medio de la matriz y compararlo con el valor 0. Los resultados de la comparación se dividen en las siguientes tres situaciones:
(. 1) Si a[mid] == 0, entonces este número es el número con el valor absoluto más pequeño.
(2) Si a[mid] > 0, a[mid - 1] < 0, entonces el valor absoluto en la matriz se puede encontrar comparando los valores absolutos de a[mid] y a[mid - 1] El número con el valor más pequeño; si a[mid - 1] == 0, entonces a[mid - 1] es el número que está buscando; de lo contrario, busque en la mitad izquierda de la matriz.
(3) Si a[mid] < 0, a[mid + 1] > 0, entonces el valor absoluto en la matriz se puede encontrar comparando los valores absolutos de a[mid] y a[mid +1] El número con el valor más pequeño; si a[mid + 1] == 0, entonces a[mid + 1] es el número que está buscando; de lo contrario, busque en la mitad derecha de la matriz.
código:
def findMinNum(arr):
si arr es Ninguno o len(arr) <= 0:
regresar
# [1] No hay números negativos en la matriz
si arr[0] >= 0:
devuelve arr[0]
# [2] No hay ningún número positivo en la matriz
si arr[-1] <= 0:
devuelve arr[-1]
# [3] Hay números positivos y negativos en la matriz
mid = Ninguno
absMin = Ninguno
comenzar = 0
fin = len( arr) - 1
mientras comienza < fin:
medio = comienzo + (fin - comienzo) >> 1
# si arr[mid] == 0, es el número con el valor absoluto más pequeño
si arr[mid] == 0:
devuelve 0
# Si es mayor que 0, los números positivos y negativos El punto divisorio está a la izquierda
elif arr[mid] > 0:
# Continuar buscando a la izquierda la mitad de la matriz
if arr[mid - 1] > 0:
end = mid - 1
elif arr[mid - 1] == 0 :
devuelve 0
# Encuentra el punto divisorio entre números positivos y negativos
else:
¿romper # Si es menor? que 0, busque en la mitad derecha de la matriz
else:
# Continuar buscando en la mitad derecha de la matriz
si arr[mid + 1 ] < 0:
comenzar = mitad + 1
elif llegar[ mitad + 1] == 0:
devolver 0
else:
break
# Obtener el valor absoluto en el punto divisorio entre números positivos y negativos El valor con el valor más pequeño
if (arr[mid] > 0):
if arr[mid] < abs(arr[mid - 1]):
absMin = arr[mid]
else:
absMin = arr[mid - 1]
else:
if abs( arr[mid]) < abs(arr[mid + 1]):
absMin = arr[mid]
más:
absMin = arr
[mid + 1]
return absMin
if __name__ == "__main__":
arr = [-10, -5, -2, 7, 15, 50]
print(findMinNum(arr))