题解 | #最长上升子序列(三)#

最长上升子序列(三)

https://www.nowcoder.com/practice/9cf027bf54714ad889d4f30ff0ae5481


class Solution:
    def LIS(self , arr: List[int]) -> List[int]:
        # write code here
        n = len(arr)
        top = [0] * n
        piles = 0
        dp = [1] * n
        for i in range(n):
            poker = arr[i]
            l, r = 0, piles
            while l < r:
                mid = (l + r) // 2
                if poker > top[mid]:
                    l = mid + 1
                else:
                    r = mid
            if l == piles:
                piles += 1
                dp[i] = piles
            else:
                dp[i] = l + 1
            top[l] = poker
            
        
        res = [0] * piles
        for i in range(n-1, -1, -1):
            if dp[i] == piles:
                piles -= 1
                res[piles] = arr[i]

        return res

全部评论

相关推荐

头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务