最长递增子序列

  • Post author:
  • Post category:其他


import bisect
class Solution:
    def LIS(self , arr ):
        # write code here
        max_len = [1] * len(arr)
        max_arr = [arr[0]]
        for i in range(1, len(arr)):
            if arr[i] > max_arr[-1]:
                max_arr.append(arr[i])
                max_len[i] = len(max_arr)
            else:
                idx = bisect.bisect_left(max_arr, arr[i])
                max_arr[idx] = arr[i]
                max_len[i] = idx + 1
        
        res = []
        MAX = max(max_len)
        for i in range(len(max_len) - 1, -1, -1):
            if max_len[i] == MAX:
                res.append(arr[i])
                MAX -= 1
        return res[::-1]



版权声明:本文为qq_38773993原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。