Explore diversas soluciones LeetCode en Python, C++, JavaScript, SQL y TypeScript. Ideal para preparación de entrevistas, aprendizaje y práctica de código en múltiples lenguajes de programación. Enlace de repositorio de Github
Hay una matriz de números enteros. números
ordenados en orden ascendente (con distinto valores).
Antes de pasar a su función, números
es posiblemente girado en un índice de pivote desconocido k
(1 <= k < números.longitud
) de modo que la matriz resultante sea [números[k], números[k+1], ..., números[n-1], números[0], números[1], ..., números[k-1]]
(0-indexado). Por ejemplo, [0,1,2,4,5,6,7]
podría rotarse en el índice de pivote 3
y convertirse [4,5,6,7,0,1,2]
.
Dada la matriz números
después la posible rotación y un número entero objetivo
, devolver el índice de objetivo
si esta en números
, o -1
si no esta en números
.
Debes escribir un algoritmo con O(log n)
Complejidad del tiempo de ejecución.
Ejemplo 1:
Aporte: números = [4,5,6,7,0,1,2], objetivo = 0 Producción: 4
Ejemplo 2:
Aporte: números = [4,5,6,7,0,1,2], objetivo = 3 Producción: -1
Ejemplo 3:
Aporte: números = [1], objetivo = 0 Producción: -1
Restricciones:
1 <= números.longitud <= 5000
-10 4 <= números[i] <= 10 4
- todos los valores de
números
son único. números
es una matriz ascendente que posiblemente esté rotada.-10 4 <= objetivo <= 10 4
Pitón
al escribir import List class Solución: def search(self, nums: List[int], target: int) -> int: # return nums.index(target) si el objetivo está en nums else -1 n = len(nums) left, derecha = 0, n-1 mientras izquierda <= derecha: medio = izquierda + (derecha - izquierda) // 2 si nums[mid] > nums[-1]: izquierda = mid + 1 else: derecha = mid - 1 def binarioSearch (límite_izquierdo: int, límite_derecho: int, destino: int): izquierda, derecha = límite_izquierdo, límite_derecho mientras izquierda <= derecha: medio = izquierda + (derecha - izquierda) // 2 if nums[mid] == destino: retorno mid elif nums[mid] > target: derecha = mid - 1 else: left = mid + 1 return -1 if (respuesta := binarioSearch(0, left-1, target)) != -1: devolver respuesta return binarioSearch( izquierda, n-1, objetivo)