Menu
CoddyTech

Longest Increasing Subsequence

Recibes una lista de números enteros nums. Una subsecuencia conserva algunos de los elementos, en su orden original, y descarta el resto; los elementos conservados no tienen que estar uno al lado del otro. Devuelve la longitud de la subsecuencia más larga cuyos valores aumentan estrictamente de izquierda a derecha. Dos valores iguales seguidos no cuentan como un aumento.

Función

lengthOfLIS(nums: integer-array) → integer
numsinteger-array
la lista de números enteros entre los que elegir
Devuelveinteger
la longitud de la subsecuencia estrictamente creciente más larga

Restricciones

  • 1 ≤ nums.length ≤ 2500
  • -104 ≤ nums[i] ≤ 104

Ejemplos

Entrada
nums = [3, 1, 8, 2, 5, 9, 4, 7]
Salida
4
Explicación
Conservar 1, 2, 5, 9 da una subsecuencia creciente de longitud 4, y lo mismo ocurre con 1, 2, 5, 7 y 1, 2, 4, 7. Ninguna elección de cinco valores mantiene un orden creciente, así que la respuesta es 4.

lock icon+20 pruebas ocultas al enviar

challenge icon

Para ir más allá

¿Puedes devolver una subsecuencia creciente más larga, no solo su longitud, y seguir ejecutándote en tiempo O(n log n)?

Restablecer código
def lengthOfLIS(nums):
    # Escribe el código aquí
Casos de prueba

Caso 1

Caso 2

Caso 3

Entrada

nums = [3, 1, 8, 2, 5, 9, 4, 7]

Esperado

4