Leetcode brushing record-300. La subsecuencia ascendente más larga (por agregar: el método con complejidad de tiempo O (nlogn))

Inserte la descripción de la imagen aquí
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)


Publicado 43 artículos originales · elogiado 14 · 20,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/weixin_41545780/article/details/105102148
Recomendado
Clasificación