Red de conocimiento informático - Problemas con los teléfonos móviles - ¿El número con el valor absoluto más pequeño en una matriz de Python?

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