A agregar: El método con
complejidad de tiempo O (nlogn)
——————————————————————————————————————————————————
Primero consideramos la complejidad de tiempo O (n ^ 2) el método
de acuerdo con las características del sujeto, la presencia del problema de la superposición sustancial
pensemos que el uso de programación dinámica
se define como un sub-problema:
encontrar la ubicación actual de la final de la más larga longitud de la secuencia aumentó
como se describe para [10,9,2,5,3,7,101 , 18]
La longitud de la subsecuencia ascendente más larga con cada posición como final es
[1,1,1,2,2,3,1,4]
Entonces la relación entre dp [i] y la primera es:
llamamos nums [ 0: i-1] Esta subsecuencia contiene todos los números más pequeños que nums [i], la secuencia es S
dp [i] = max (dp [j]) + 1, j∈S.
Finalmente, devolvemos max ( dp)
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
if nums == []:
return 0
dplist = []
length = len(nums)
for i in range(length):
if i == 0:
dplist.append((1))
#dplist中存放一个个数字,
#dplist[i]是以i位置为结尾的最长上升子序列的长度,
else:
tempmax = -1
tempindex = -1
for j in range(i):
if nums[j] < nums[i]:
if dplist[j] > tempmax:
tempmax = dplist[j]
tempindex = j
if tempindex == -1:#nums[0:i-1]中没有比nums[i]更小的
dplist.append(1)
else:
dplist.append(dplist[tempindex] + 1)
return max(dplist)