leetcode 704. Búsqueda binaria (python)

Llega oferta, cava amigos a recoger! Estoy participando en el evento de registro de reclutamiento de primavera de 2022, haga clic para ver los detalles del evento

describir

Dada una matriz de números enteros ordenados en orden ascendente y un objetivo entero, escriba una función para buscar el objetivo en números. Si el objetivo existe, devuelve su índice. De lo contrario, devuelve -1.

Debe escribir un algoritmo con una complejidad de tiempo de ejecución O(log n).

Ejemplo 1:

Input: nums = [-1,0,3,5,9,12], target = 9
Output: 4
Explanation: 9 exists in nums and its index is 4
复制代码

Ejemplo 2:

Input: nums = [-1,0,3,5,9,12], target = 2
Output: -1
Explanation: 2 does not exist in nums so return -1
复制代码

Nota:

1 <= nums.length <= 10^4
-10^4 < nums[i], target < 10^4
All the integers in nums are unique.
nums is sorted in ascending order.
复制代码

Analizar gramaticalmente

De acuerdo con el significado de la pregunta, dada una matriz de números enteros ordenados en orden ascendente y un objetivo entero, escriba una función para buscar el objetivo en números. Si el destino existe, se devuelve su índice. De lo contrario, devuelve -1. El título ha establecido claramente que tenemos que escribir un algoritmo con una complejidad de tiempo de ejecución O(log n).

Mirando las palabras clave del tema "matriz", "ordenar", "buscar", "objetivo", "O(log n) complejidad de tiempo", entonces esta pregunta es definitivamente el método de búsqueda binaria, como dice el título "Búsqueda binaria ". Entonces la solución es muy clara, es decir, utilizar el método de búsqueda binaria para resolver el problema. La idea es sencilla:

  • Inicializamos dos punteros i y j para que apunten a la cabeza y la cola de nums respectivamente
  • Realice el ciclo while, encontramos la posición media mid = (i + j) // 2, y luego comparamos, si nums[mid] es igual al objetivo, entonces podemos encontrar el objetivo y devolver el índice directamente; si nums [mid] es mayor que el objetivo, entonces significa que el objetivo puede estar en la primera mitad, por lo que debemos asignar mid-1 a j; si nums[mid] es menor que el objetivo, significa que el objetivo puede estar en la mitad segunda mitad, por lo que debemos asignar mid + 1 a i;
  • Bucle hasta i>j, significa que no se puede encontrar, simplemente devuelva -1 directamente

La complejidad temporal es O(log n) y la complejidad espacial es O(1).

responder

class Solution(object):
    def search(self, nums, target):
        i = 0
        j = len(nums) - 1
        while i <= j:
            mid = (i + j) // 2
            if nums[mid] == target:
                return mid
            elif nums[mid] > target:
                j = mid - 1
            else:
                i = mid + 1
        return -1	
复制代码

resultado de la operación

Runtime: 279 ms, faster than 41.48% of Python online submissions for Binary Search.
Memory Usage: 14.6 MB, less than 78.69% of Python online submissions for Binary Search.
复制代码

Enlace del título original

leetcode.com/problems/bi…

Tu apoyo es mi mayor motivación.

Supongo que te gusta

Origin juejin.im/post/7079217690295943205
Recomendado
Clasificación