Claramente, solo los primeros k elementos de cada lista (M y N) son relevantes, por lo que los elementos restantes pueden ignorarse.
Desde este punto, el problema se puede resolver con una forma modificada de búsqueda binaria, con una gran O de log (k). Para cada elemento [math] a = M [i] [/ math], [math] 0 \ leq i <k [/ math] buscamos en la lista M, buscamos [math] N [j] [/ math ], [matemáticas] j = ka-1 [/ matemáticas]. Aquí hay una implementación de Python:
def ksmallest (M, N, k): min_poss = max (0, k-len (N) -1) max_poss = min (k-1, len (M) -1) r = 0 si k == 1: retorno min (M [0], N [0]) si k == len (N) + len (M): retorno máximo (M [-1], N [-1]) mientras max_poss-min_poss> 0: d = max_poss-min_poss l = min_poss + (d + 1) // 2 imprimir (l, k- (l + 1)) a = M [l] b = N [k- (l + 1)] imprimir (l, d, a, b) si a == b: descanso si a <b: min_poss = l más: max_poss = l-1 si l <len (M) -1: retorno min (a, b) retorno max (a, N [k- (l + 1) -1])
- En Facebook, ¿qué determina los ocho amigos que se muestran en esa cuadrícula de imágenes de perfil 4 × 2?
- Cómo clasificar 5 números, de mayor a menor, con sentencias if y no arrays en Java o Python
- ¿Qué es la estructura de datos, algoritmo en informática? ¿Cuál es la mejor forma en línea para aprenderlo?
- ¿Los números en pi imitan una distribución aleatoria? Si es así, ¿cómo es esto compatible con el uso de algoritmos para generar los números?
- ¿Cuáles son algunas preguntas asombrosas de CodeChef con soluciones comprensibles que me ayudarán a aprender nuevos métodos y conceptos?