[LeetCode] 0033. Buscar en una matriz ordenada rotada

Buscar en matriz ordenada rotada

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

Tabla de contenido

Medio

 


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)
				
			
es_ESEspañol