微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LeetCode 最长递增子序列

如何解决LeetCode 最长递增子序列

我正在解决以下 leetcode 问题:

给定一个整数数组 nums,返回最长严格递增子序列的长度。

给出的解决方案是 O(N^2) 时间,但我有以下解决方案在当前状态下不起作用:

   def lengthOfLIS(self,nums: List[int]) -> int:
        dp = [-1 for i in range(len(nums))]
        dp[0] = 1
        for i in range(1,len(nums)):
            if nums[i] > nums[i-1]:
                if i >= 2:
                    if dp[i] > dp[i-2]:
                        dp[i] = max(dp[i-1],dp[i-2],0) + 1
                    else:
                        dp[i] = dp[i-1] + 1
                else:
                    dp[i] = dp[i-1] + 1
            else:
                dp[i] = 1
        return max(dp)

我正在尝试获得 O(N) 解决方案(如果可能,但我不确定!)。我的逻辑如下选择 dp[i],方法是在需要时删除一个元素或以其他方式选择它。是否可以修复我的方法,还是应该将其全部归类?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。