300. 最长上升子序列

时间复杂度为O(n^2)的算法

class Solution(object):
    def lengthOfLIS(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n = len(nums)
        if n == 0:
          return 0
        
        # 所有的单个的nums[i] 都可以构成一个lis, 长度为1
        dp = [1]*n
        # dp初始化条件, 如果只有一个元素, 那么这个dp[0]=1
        dp[0] = 1
        max_lis = 1
        
        for i in range (1,n):
          for j in range(0,i):
            # 对于每一个小于nums[i] >nums[j], 更新公式
            if(nums[i]>nums[j]):
              if(dp[j]+1>dp[i]):
                dp[i] = dp[j]+1
          max_lis = max(max_lis,dp[i])
          
        return max_lis

你可能感兴趣的:(300. 最长上升子序列)