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

最长上升子序列(三)

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

全部评论

相关推荐

10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
10-15 10:57
已编辑
武昌理工学院 FPGA工程师
狠赚笔第一人:老哥学院本没实习还想拿13k学Java狠赚笔呢
点赞 评论 收藏
分享
11-27 12:43
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务