Los temas son los siguientes:
El poder de un número entero
x
se define como el número de pasos necesarios para transformarx
en1
el uso de los siguientes pasos:
- si
x
es incluso entoncesx = x / 2
- si
x
es impar entoncesx = 3 * x + 1
Por ejemplo, la potencia de x = 3 es 7 debido a 3 necesidades 7 pasos para convertirse en 1 (3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1) .
Dado tres números enteros
lo
,hi
yk
. La tarea es ordenar todos los números enteros en el intervalo[lo, hi]
por el valor de potencia en orden ascendente, si dos o más enteros tienen el mismo valor de potencia ordenarlos por orden ascendente.Devolver el
k-th
número entero en el rango[lo, hi]
ordenados por el valor de la potencia.Tenga en cuenta que para cualquier entero
x
(lo <= x <= hi)
se garantiza quex
se transformará en1
el uso de estos pasos y que el poder dex
es quepa en 32 bits con signo entero.Ejemplo 1:
Entrada: Lo = 12, hi = 15, k = 2 de salida: 13 Explicación: El poder de 12 es 9 (12 -> 6 -> 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1) el poder de 13 es 9 la potencia de 14 es 17 el poder de 15 es 17 el intervalo de ordenadas según el valor de potencia [12,13,14,15]. Para k = 2 respuesta es el segundo elemento que es 13. Observe que 12 y 13 tienen el mismo valor de la potencia y les clasifican en orden ascendente. Lo mismo para el 14 y el 15.Ejemplo 2:
Entrada: Lo = 1, hi = 1, k = 1 Salida: 1Ejemplo 3:
Entrada: Lo = 7, hi = 11, k = 4 de salida: 7 Explicación: La matriz de potencia correspondiente al intervalo [7, 8, 9, 10, 11] es [16, 3, 19, 6, 14]. El intervalo ordenados por potencia es [8, 10, 11, 7, 9]. El cuarto número en la matriz ordenada es 7.Ejemplo 4:
Entrada: Lo = 10, hi = 20, k = 5 de salida: 13Ejemplo 5:
Entrada: Lo = 1, hi = 1,000, k = 777 de salida: 570limitaciones:
1 <= lo <= hi <= 1000
1 <= k <= hi - lo + 1
La resolución de problemas las ideas: la gama de hi y lo es de 1 a 1000, el poder entre todos los números dentro del rango se consideran para resolver suficiente.
Código es el siguiente:
clase Solution (objeto): def getKth (self, lo, hi, k): "" " : Tipo de lo: int : Tipo hi: int : Tipo k: int : RTYPE: int """ par = [] def transformar ( val): recuento = 0 , mientras que val = 1! : val = val / 2 si val% 2 == 0 cosa 3 * val + 1 recuento + 1 = retorno recuento de i en el rango (lo, hi + 1 ): pair.append ((i, transformo (i))) def CMPF (v1, v2): si v1 [1] = v2 [1! ]: retorno v1 [1] - v2 [1 ] retorno v1 [0] - v2 [0] pair.sort (CMPF) retorno par [k-1] [0]