Posición de inserción de búsqueda de leet-code: ¿Por qué mi búsqueda binaria no puede devolver la respuesta correcta?
clase Solución:
def búsqueda_binaria_recursiva(self, nums: list[int], objetivo: int, base: int):
if (len(nums) == 1):
return base
posición = int((len(nums) - 1)/2)
if (nums[posición] == objetivo):
return base + posición + 1
elif (nums[posición] > objetivo):
base = base + int((len(nums) - 1) / 2)
return Solución.búsqueda_binaria_recursiva(self, nums[posición+1:], objetivo, base)
elif (nums[posición] < objetivo):
return Solución.búsqueda_binaria_recursiva(self, nums[:posición+1], objetivo, base)
def buscarInsertar(self, nums: list[int], objetivo: int) -> int:
return Solución.búsqueda_binaria_recursiva(self, nums, objetivo, 0)
La pregunta requiere:
Dada una matriz ordenada de enteros distintos y un valor objetivo, devuelve el índice si se encuentra el objetivo. Si no, devuelve el índice donde se insertaría en orden.
Debe escribir un algoritmo con una complejidad de tiempo de ejecución O(log n).
davy.ai
Algoritmo de búsqueda binaria en Python con una complejidad de tiempo de ejecución de O(log n)
Este script de Python implementa un algoritmo de búsqueda binaria para buscar en un arreglo ordenado de enteros distintos y devolver el índice del valor objetivo si se encuentra o el índice donde se insertaría en orden. El algoritmo tiene una complejidad de tiempo de ejecución de O(log n).
El método
recursive_binary_search
realiza la búsqueda binaria de forma recursiva dividiendo la lista en dos mitades hasta que se encuentre el valor objetivo o el tamaño de la lista se reduzca a uno. Devuelve el índice del valor objetivo, si se encuentra, o la posición donde debería estar, calculada en función de la ruta de búsqueda seguida.El método
searchInsert
llama al métodorecursive_binary_search
con el valor base inicial establecido en 0. Devuelve el resultado de la búsqueda binaria.Para probar el algoritmo, puedes crear un objeto
Solution
y llamar al métodosearchInsert
con una lista ordenada de enteros y un valor objetivo. Por ejemplo:En este ejemplo, la lista de entrada
[1, 3, 5, 6]
es un arreglo ordenado de enteros distintos, y el valor objetivo es5
. El algoritmo devuelve2
, que es el índice del valor objetivo en la lista.